Sha*_*awn 1 c++ stl vector erase
在这个例子中,我创建了一个包含一个整数的向量,然后我从向量中删除了该整数.向量的大小减小,但整数仍然存在!为什么整数仍然存在?大小为0的向量如何包含元素?
#include <vector>
#include <iostream>
using namespace std;
int main(int agrc, char* argv[])
{
vector<int> v;
v.push_back(450);
cout << "Before" << endl;
cout << "Size: " << v.size() << endl;
cout << "First element: " << (*v.begin()) << endl;
v.erase(v.begin());
cout << "After" << endl;
cout << "Size: " << v.size() << endl;
cout << "First element: " << *(v.begin()) << endl;
return(0);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Before
Size: 1
First element: 450
After
Size: 0
First element: 450
Run Code Online (Sandbox Code Playgroud)
Nav*_*een 10
您通过取消引用无效的内存位置来调用未定义的行为.通常,delete为了提高效率,堆管理器不会立即释放已删除的内存.但是,这并不意味着您可以访问该内存位置,堆管理器可以在需要时将此内存位置用于其他目的.因此,如果取消引用无效的内存位置,您的程序将无法预测.