1. 程式人生 > 其它 >關於vector.size()的一些常見錯誤總結

關於vector.size()的一些常見錯誤總結

1. 問題引入

通過檢視[https://www.cplusplus.com/reference/vector/vector/] 的vector.size()說明,即

member type definition notes
size_type an unsigned integral type that can represent any non-negative value of difference_type usually the same as size_t

從表中可以知道:vector.size()的返回值是vector動態陣列容器的尺寸大小,也就是內部元素個數。
但是我們容易忽略的是返回值的資料結構是 unsigned int,而不是int

,這就會引發一些問題。

2. 常見錯誤

2.1 迴圈遍歷時的警告

當我們利用for迴圈遍歷vector的元素時,需要注意的是迭代引數最好設定為unsigned int,而不是int,即
for (unsigned int i = 1; i < nums.size(); i++)
否則會引發警告:
C4018 “<”: 有符號/無符號不匹配

2.2 判斷時的錯誤

例如下面這段程式:

int i = 1;
vector<int> nums = { 3,2,1 };
int ans = 0;
if (i - nums.size() < 0)
	ans = 1;
return ans;

我們想要ans返回的1,但時實際輸出為0,通過除錯我們發現,if語句無法進入,這就是因為i為int型別,而nums.size()為unsigned int型別,兩者做運算,會強制更改為unsigned int型別,也就導致i - nums.size() > 0,無法進入if語句,此時改進方法有兩種:

  • 方法一:強制轉化為int型別,即if ((int)(i - nums.size()) < 0)或者if (i - (int)nums.size() < 0)
  • 方法二:將nums.size()移動到比較符號的一邊,即if (i < nums.size())
作者:
雲夢士
出處:http://www.cnblogs.com/yunmeng-shi/ 本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,並保留此段宣告,否則保留追究法律責任的權利。