我创建了一个结构体向量。如何从结构体向量中删除元素?使用 vector.erase() 似乎无法正常工作

问题描述 投票:0回答:1
#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++ 新手。请有人能解释一下。

c++ vector struct structure
1个回答
0
投票

矢量修改器擦除正在按预期工作。您需要更多地了解 Vector STL

来自 向量运算符[] [强调]:

返回对指定位置 pos 处元素的引用。 不执行边界检查

注释
...通过此运算符访问不存在的元素是未定义的行为

© www.soinside.com 2019 - 2024. All rights reserved.