關於vector.size()的一些常見錯誤總結
阿新 • • 發佈:2021-07-14
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())