使用vector push_back分配内存

Memory allocation with vector push_back

本文关键字:分配 内存 back vector push 使用      更新时间:2023-10-16

我今天学到了一些有趣的东西:如果我有一个标准向量v,我运行这样的代码:

std::vector<float> v;
for (int i = 0; i < 2; i++) v.push_back(2.);

如果我调用v[2],我不会得到分割错误,因为operator[]不做边界检查。我得到了一个非常小的数字,但我很好奇push_back的默认行为是什么,以及我应该从溢出向量边界中得到什么。我认为它必须分配比下一个浮点数更多的空间。多少钱?这是在标准中,还是特定于编译器?

我今天学到了一些有趣的东西

所以是时候学习更有趣的东西了:你的代码有未定义行为,因为使用下标操作符的先决条件是索引小于vector的大小。

根据c++ 11标准表101,表达式a[n]等价于*(a.begin() + n)。由于v.begin() + 2是指向容器v末尾以外位置的迭代器,对其解引用将导致未定义行为。

如果我调用v[2],我不会得到一个分割错误,因为operator[]不做边界检查

这两个不是这样的关系…

你的代码调用未定义行为,所以它可以做任何事情