#include <iostream>
#include <string>
#include <vector>
using std::cout; using std::endl;
using std::vector; using std::string;
struct Person{
string name;
string surname;
int age;
};
int main(){
vector<Person> parr1 = {{"John", "Cooper", 32},
{"Theo", "Parrot", 23},
{"Kim", "Colbert", 53}};
int i=0;
parr1.erase(parr1.begin()+0);
for (const auto &arr : parr1) {
cout << i << endl;
cout << "Name: " << arr.name << endl
<< "Surname: " << arr.surname << endl
<< "Age: " << arr.age << endl;
i++;
}
cout<<parr1[2].age<<endl;
return 0;
}
在上面的代码中,在访问越界元素时,它不会给出任何错误。另外,指向不再位于向量中的结构对象元素的指针(使用擦除删除)会发生什么?我需要结构的析构函数吗?
0 姓名:西奥 姓氏: 鹦鹉 年龄:23 1 姓名:金 姓氏:科尔伯特 年龄:53 53
这是我得到的输出,这不是我所期望的。我是 C++ 新手。请有人能解释一下。
矢量修改器擦除正在按预期工作。您需要更多地了解 Vector STL。
来自 向量运算符[] [强调]:
返回对指定位置 pos 处元素的引用。 不执行边界检查。
注释
...通过此运算符访问不存在的元素是未定义的行为。