相关疑难解决方法(0)

从std :: multimap <>删除项目后,是否可以继续使用迭代器?

即使在调用multimap :: erase()之后,我还能继续使用多重映射迭代器吗?例如:

Blah::iterator iter;
for ( iter = mm.begin();
      iter != mm.end();
      iter ++ )
{
    if ( iter->second == something )
    {
        mm.erase( iter );
    }
}
Run Code Online (Sandbox Code Playgroud)

是否应该正确运行,或者在调用擦除后迭代器是否无效?像http://www.cplusplus.com/reference/stl/multimap/erase.html这样的参考站点在迭代器的生命周期主题或者建设性/破坏性方法对迭代器的影响方面都非常安静.

c++ stl multimap

2
推荐指数
1
解决办法
5055
查看次数

C++在擦除时循环遍历地图

要用c ++循环遍历地图,我们就像这样做

map<string,int> mymap;
map<string,int>::iterator it= mymap.begin();
while(it!=mymap.end()) {
   //code here
   it++;
}
Run Code Online (Sandbox Code Playgroud)

如果在"代码在这里"部分我有一个if语句,如果评估为true,它会从地图中删除一个元素怎么办?我的代码应如何更改,以便仍然按顺序循环遍历所有mymap元素?

c++

1
推荐指数
1
解决办法
406
查看次数

删除列表元素时,迭代器最后会发生什么?

我写了这个简单的测试程序.但我无法理解这里发生了什么.因为输出中有一个奇怪的东西:

std::list<std::pair<double,double>> l;
l.push_back({0.3,0.9});
l.push_back({-0.3,0.5});
l.push_back({0.3,0.7});
l.push_back({1.2,1.83});   


for(auto it=l.begin(); it!=l.end(); ++it){
  double lx= it->first + 0.01;
  double ly= it->second + 0.01;

  it->first = lx;
  it->second = ly;

  if(lx < 0.0 || lx > 1.0 || ly < 0.0 || ly > 1.0){
    it = l.erase(it);
 }
Run Code Online (Sandbox Code Playgroud)

如果我打印列表,我得到:

0.32, 0.92
0.31, 0.71
Run Code Online (Sandbox Code Playgroud)

为什么迭代器会回到第一个元素(两次+0.1)?

c++

1
推荐指数
1
解决办法
154
查看次数

迭代时擦除std :: map的其他元素

我有一个包含以下键值对的地图.{(α,β),(B,Q),(C,R),(d,S),...(G,Z)}

我正在迭代这个地图,并且在每个元素处,我采用一个访问同一个地图的分支,并在满足条件时擦除地图的一个元素.简单地说,当主迭代器处于(bQ)时,分支函数可以擦除(d,S).

这是有效的吗?或者这会出现错误吗?

c++ algorithm

-1
推荐指数
1
解决办法
1059
查看次数

标签 统计

c++ ×4

algorithm ×1

multimap ×1

stl ×1