无法删除地图向量中的最后一个元素

时间:2018-07-08 01:13:27

标签: c++

我有一个地图矢量,每个地图都代表一个联系人。但是,如果我尝试删除最后一个元素,我的erase函数会产生段错误。

#include <map>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
typedef map<string, string> contact;

void erase(string name, vector<contact> &v)
{
    for (auto it = v.begin(); it != v.end(); ++it)
    {
        if ( (*it)["name"] == name ) v.erase(it);
    }
}

int main() {
    vector<contact> contacts;

    contact c1 = {
        {"name", "foo"}
    };
    contact c2 = {
        {"name", "bar"}
    };
    contact c3 = {
        {"name", "baz"}
    };
    contacts.push_back(c1);
    contacts.push_back(c2);
    contacts.push_back(c3);
    erase("baz", contacts);
}

如果将"foo""bar"传递给erase,则上面的代码可以正常工作。

0 个答案:

没有答案