以下代码不会引发错误:

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]会引发错误,因为矢量已通过pop_back操作调整大小。为什么仍然可以访问数据?是否因为底层数组中的数据仍然存在并且vector pop_back操作仅修改迭代器?

最佳答案

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

at() member function可以。

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

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

10-11 22:59