在C++向量中访问元素大小

Tur*_*ism 2 c++ size vector capacity

今天我在VS2012和Max OS 10.7中尝试这样的东西

    vector<int> vec;
    vector<int> vec2;
    for(int i = 0;i < 100 ;i++){
        vec.push_back(i);
    }

    cout << "size: " << vec.size() << endl;
    cout << "capacity: " << vec.capacity() << endl;
    cout << vec[127] << endl;
    //vec2.reserve(10);
    fill_n(vec.begin(),128,-1);
    cout << vec[127] << endl;
    return 0;
Run Code Online (Sandbox Code Playgroud)

因为我们知道vector的大小是容器中元素的实际数量,上面的代码可能会导致VS2012中的运行时错误,但它在Max OS上运行正常,我在Ideone.com中尝试并且运行成功,我是不确定大小和容量的定义是否有问题,为什么我可以访问元素超出规模?

PS:我的电脑在这种情况下的容量在VS2012上是141,在Mac OS和Ideone.com上是128

P0W*_*P0W 8

std::vector运算符[]不会抛出任何超出范围的错误.使用[]运算符访问大于矢量大小的元素是一种未定义的行为.

std::vector::at改为使用,抛出std::out_of_range