首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中擦除后在地图上迭代时出现奇怪的问题

在c++中擦除后在地图上迭代时出现奇怪的问题
EN

Stack Overflow用户
提问于 2019-11-16 21:40:57
回答 2查看 64关注 0票数 0

我有一个瓷砖地图,其中包含我所有的瓷砖。我想擦除一个瓷砖,并在同一时间继续绘制我的瓷砖。

问题是,在我擦除了一个瓦片(如index = 2)之后,瓦片绘制的第一次完整迭代是正确的(绘制0,1,3,4,...),但第二次迭代导致崩溃,因为它试图绘制所有瓦片(0,1,2,3,...)

下面是我删除一个磁贴的代码

代码语言:javascript
复制
auto it = tiles.begin();
while(it != tiles.end()){
    if(it->first == i){
        it = tiles.erase(it);
    }
    else
        ++it;
}

下面是我要绘制的代码

代码语言:javascript
复制
for(auto& itr : tiles){
    if(itr.first == limit)
        break;
    if(itr.first < 10){
        cout<<"draw : "<<itr.first<<"\t"<<itr.second.str()<<endl;
    }
    itr.second.draw(window,dt);
}

(限制是不能遍历x上千个瓦片)

这里是控制台输出

画图:0(0,24)画图:1(32,24)画图:2(64,24)画图:3(96,24)画图:4(128,24)画图:5(160,24)画图:6(192,24)画图:7(224,24)画图:8(256,24)画图:9(288,24)画图

删除0:0(0,24)停留1(32,24)停留

抽签:1(32,24)抽签:2(64,24)抽签:3(96,24)抽签:4(128,24)抽签:5(160,24)抽签:6(192,24)抽签:7(224,24)抽签:8(256,24)抽签:9(288,24)抽签

绘制:0 (-1163005939,-1163005939)

我的英语很抱歉,谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-12-06 05:19:37

当擦除迭代的值时,迭代不能指向下一个迭代,因此简单的方法是:

代码语言:javascript
复制
  auto it = m.begin();
  while (it != m.end()) 
  {
    if (it->first == 1)
      m.erase(it++); // After return from erase function, it point to next pointer.
    else
      ++it;
  }
票数 0
EN

Stack Overflow用户

发布于 2019-11-16 21:57:59

我认为最有可能的情况是,您实际上并没有从您正在绘制的平铺地图中删除该元素。如何将map传递给删除tiles的代码?您可能正在某处创建一个副本。

仅供参考,像这样的代码可以工作,所以你的代码没有明显的错误。bug在您发布的代码之外的某个地方。

代码语言:javascript
复制
int main() {
  std::map<int, std::string> m = {{0, "A"}, {1, "B"}, {2, "C"}};

  for (auto& t : m) {
    std::cout << t.first << " = " << t.second << std::endl;
  }

  auto it = m.begin();
  while (it != m.end()) {
    if (it->first == 1) {
      it = m.erase(it);
    } else {
      ++it;
    }
  }

  for (auto& t : m) {
    std::cout << t.first << " = " << t.second << std::endl;
  }

  return 0;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58891325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档