我有一个地图矢量,每个地图都代表一个联系人。但是,如果我尝试删除最后一个元素,我的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
,则上面的代码可以正常工作。