關於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())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM