以下代码不会引发错误:
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/