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

Kat*_*tie 1 c++ vector erase clear

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

Suppliers s;
s.clean_up();
Run Code Online (Sandbox Code Playgroud)

并在文件x.cpp中

void Suppliers::clean_up(){
    for(auto i : setter){
        i.second.clear();}}
Run Code Online (Sandbox Code Playgroud)

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

 map<std::string,std::vector<location>> setter
Run Code Online (Sandbox Code Playgroud)

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

Suppliers s;
for (auto item : s.setter){
     item.second.clear();}
Run Code Online (Sandbox Code Playgroud)

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

Cor*_*mer 6

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

for(auto& i : setter)
{
    i.second.clear();
}
Run Code Online (Sandbox Code Playgroud)

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