天天看點

C++踩坑之vector的size比較

寫代碼時遇到vector的size比較,代碼片截取修改如下

#include<iostream>
#include<vector>
using namespace std;
int main()
{	vector<int> A;
    A = { 2,-1,2 };
    int x = A.size() - 4;
    if (0<= A.size() - 4) {
        cout << "過程執行(本不應執行)" << endl;
    }
}
           

上述過程本不應執行,因為照我們了解

A.size()-4=-1

0>-1

if不成立,則不執行

而實際上A.size()-4不是-1

#include<iostream>
#include<vector>
using namespace std;
int main()
{	vector<int> A;
    A = { 2,-1,2 };
    int x = A.size() - 4;
    if (0<= A.size() - 4) {
        cout << A.size() - 4 << endl;
    }
}
           

結果為4294967295

因為A.size()的預設存儲形式不是int,而是unsigned int, int為短整型,即有正負數之分,而A.size()不可能為負數,定義成了無符号短整型。是以當求A.size()-4時,預設資料格式跟随,發生下溢。即4294967295

要正常求得A.size()-4時,隻需加上

int x = A.size() - 4;

強制類型轉換

#include<iostream>
#include<vector>
using namespace std;
int main()
{	vector<int> A;
    A = { 2,-1,2 };
    int x = A.size() - 4;
    if (0<= x) {
        cout << "過程執行(本不應執行)" << endl;
    }
}
           

可以看到現在過程不執行了

繼續閱讀