c++ - 为什么在调整大小后我仍然可以访问 vector 数据?

标签 c++ vector stdvector

以下代码不会抛出错误:

int main()
{
typedef std::vector<int> intstack;

intstack mystack;

mystack.push_back(7);
mystack.push_back(8);
mystack.push_back(9);

mystack.pop_back();
std::cout << mystack.size(); //prints 2
std::cout << mystack[2]; // prints 9
return 0;
}

我会想到 std::cout << mystack[2] 这行会抛出错误,因为 vector 已被 pop_back 调整大小手术。为什么数据仍然可以访问?是不是因为底层数组中的数据还在, vector pop_back操作只修改迭代器?

最佳答案

std::vector operator[]不执行范围检查。

at() member function

您的线路std::cout << mystack[2]具有未定义的行为。

关于c++ - 为什么在调整大小后我仍然可以访问 vector 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253831/

相关文章:

c++ - 使用 vector (STL)时的未定义行为,请解释以下代码输出背后的原因

c++ - 迭代器类型中使用的 vector 元素类型

c++ - 如何在GPU上复制OpenACC中分配的 vector 指针内存的 vector

c++ - 两次初始化: Foo f(); Foo f = Foo()有什么区别

c++ - 与从变量中简单读取相比,具有 memory_order_relaxed 的 atomic_load() 是否会引入任何额外的开销?

c++ - 获取指向集合中原始数据的指针,如 &(vector[0])

C++ 在读取 70,000 个文件时会随着时间变慢

c++ - std::vector 的一个小问题,并在遍历它时更改集合

html - 如何从 HTML 输入中读取数据并将该数据本地写入文件以供将来访问

c++ - basic_string 类是否真的具有采用多个参数的复制构造函数,还是只是构造函数?