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

C++ vector::erase在类方法中不起作用,但在main中起作用;没有编译器错误,只是意外的结果,c++,vector,erase,C++,Vector,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 我没有编译器

我在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

我没有编译器错误,在一种情况下位置向量被擦除,在一种情况下它没有。我唯一能想到的是setter的实例不一样。但因为我使用的是一种方法,我不明白为什么这不起作用。任何帮助都会很好,提前谢谢

应该使用对映射项的引用进行迭代

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

否则,我将成为每个std::pair的副本。因此,它将清除副本的向量,而不是映射中的实际实例。

您应该使用对映射项的引用进行迭代

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

否则,我将成为每个std::pair的副本。因此,它将清除副本的向量,而不是映射中的实际实例。

欢迎使用堆栈溢出!请提供。欢迎使用堆栈溢出!请提供一份报告。