C++中vec.size()-1的坑

问题描述:如下代码,

#include 
#include 

using namespace std;

int main() {
    vector<int> vec = {};
    
    for (int i = 0; i < vec.size() - 1; ++i) {
        cout << "i = " << i << ", vec[i] = " << vec[i] << endl;
    }
    
    return 0;
}

运行,系统报Segmentation Fault。

C++中vec.size()-1的坑_第1张图片
调试代码如下,

C++中vec.size()-1的坑_第2张图片

根因分析如下

vector的size()方法返回的size_t类型,size_t是无符号整数类型,它的范围取决于编译器和操作系统的位数。在大多数平台上,size_t的范围通常是0到4294967295(32位操作系统)或0到18446744073709551615(64位操作系统)。

解决方法1:将i < vec.size() - 1修改为i + 1 < vec.size()

C++中vec.size()-1的坑_第3张图片

解决方法2:先定义整型变量int n = vec.size();然后将i < vec.size() - 1修改为i < n - 1

C++中vec.size()-1的坑_第4张图片

你可能感兴趣的:(C++学习,c++,开发语言)