c++ - 为什么std::vector允许使用[]进行分配,但是size()和Capacity()不变?

标签 c++ vector stl

我进行如下测试,创建一个 vector 并将其容量设置为1,然后使用v[100]=100;直接分配v [100]但不触发核心转储,为什么? vector v应该没有足够的内存来访问v [100 ],但是v [100]已成功分配为100,并且size和Capacity()保持为0和1,如何理解呢?

int main(){
    std::vector<int> v;
    v.reserve(1); 
    v[100]=100;                      //here does't triggle core dump, wired
    std::cout<<v.size()<<std::endl;  //0 
    std::cout<<v.capacity()<<std::endl; //1
    std::cout<<v[100]<<std::endl;    //100
return 0;
}

最佳答案

这是因为 std::vector::operator[] 不执行边界检查。如果使用无效的索引,则会导致未定义的行为。

如果要进行边界检查,则应使用 std::vector::at 。如果使用无效的索引,它将引发异常。

v.at(100)=100; // this will throw a std::out_of_range exception

关于c++ - 为什么std::vector允许使用[]进行分配,但是size()和Capacity()不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60719489/

相关文章:

c++ - 如何更改 WebBrowser 全屏视频模式?

c++ - 将 std::vector::data 传递给期望类型**(双指针)的函数

c++ - 在 Vector 上 push_back 时设置精度

c++ - map 的Setter和Getter方法

c++ - 与 boost::interprocess 共享内存时从 std::string 转换为 "MyShmString"

c++ - 如何获取QTableView中的所有值?

c++ - 类 "list"包含包含类的结构

vector - 向量中的可变结构

c++ - 检查 map 中的 'deepest' 元素

c++ - 排序列表和结构 vector 之间的性能差距。 C++