vector :: erase在类方法中不起作用,但在main中起作用;没有编译器错误,只是意外的结果

时间:2015-06-05 15:24:11

标签: c++ vector clear erase

我在文件x.cpp中有以下语句。供应商和地点是我创建的课程。如果我在main.cpp中写道

Suppliers s;
s.clean_up();

和文件x.cpp

void Suppliers::clean_up(){
    for(auto i : setter){
        i.second.clear();}}

Setter是供应商的公共数据成员

 map<std::string,std::vector<location>> setter

我尝试打印时不会清除地图。相反,如果我在main中有以下内容,我的地图中的值将按照我的预期清除。

Suppliers s;
for (auto item : s.setter){
     item.second.clear();}

我没有编译器错误,在一种情况下,位置向量被删除,在一种情况下它不是。我唯一能想到的是setter的实例并不相同。但因为我正在使用一种方法,我无法理解为什么这不起作用。任何帮助都会很棒,提前谢谢!

1 个答案:

答案 0 :(得分:6)

您应该使用对地图项的引用进行迭代

for(auto& i : setter)
{
    i.second.clear();
}

否则i将是每个std::pair<std::string, std::vector<location>>副本。因此它将clear()副本的向量,而不是map中的实际实例。