bool threeConsecutiveOdds(vector<int>& arr) {
for (int i = 0; i < arr.size() - 2; ++i) {
if (arr[i] & 1 && arr[i + 1] & 1 && arr[i + 2] & 1)
return true;
}
return false;
}
vector<int>c = { 1};
threeConsecutiveOdds(c);
?
陣列的大小為1,1-2是-1,0是大于-1的,怎么還進入回圈了呢
uj5u.com熱心網友回復:
1-2=-1i=0
永為假
uj5u.com熱心網友回復:
假就不進入回圈啊
uj5u.com熱心網友回復:
很簡單的道理,因為vector的size回傳值是size_t型別而size_t一般是typedef unsigned int
那么中間控制回圈的運算式運算前就會被提升為unsigned int
于是為真,于是進入回圈了
uj5u.com熱心網友回復:
也就是說你的-1被悄悄變成4294967295了。uj5u.com熱心網友回復:
unsigned a=1;if(a>-1)
printf(">>>>\n");
else
printf("<<<<\n");
就是這樣的道理。
uj5u.com熱心網友回復:
size()函式的回傳值是無符號整型,這時arr.size() - 2是一個正數,所以 for (int i = 0; i < arr.size() - 2; ++i)這個條件是成立的。這么改下:for (int i = 0; i < (int) arr.size() - 2; ++i)還有就是陣列定義:vector<int>c = { 1}; ,我試了報錯的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/272062.html
標籤:C++ 語言
上一篇:python你TM太皮了——區區30行代碼就能記錄鍵盤的一舉一動
下一篇:求助,為什么一直不是回文數
