在迭代时删除 [英] deleting while iterating

查看:113
本文介绍了在迭代时删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


可能的重复项:

Vector.erase(Iterator)导致内存访问不良

Possible Duplicates:
Vector.erase(Iterator) causes bad memory access
iterate vector, remove certain items as I go.

您好,
我写了这个,但我运行它时遇到一些错误

Hi, I wrote this but I am get some errors when running it

for (vector< vector<Point> >::iterator track = tracks_.begin(); track != tracks_.end(); track++) {
        if (track->empty()) { // if track is empty, remove it
            tracks_.erase(track);
            track++; // is this ok?
        }else {   //if there are points, deque
            track->erase(track->begin()); //my program crashes here after a while... ;(
        }
    }

我有一个向量的矢量点(2 ints)其我调用轨道(1轨道是1点向量)
我想检查每个轨道,如果它们包含点,然后删除第一个否则删除这是正确的吗?

I have a vector of vector of points (2 ints) whose I call tracks (1 track is 1 vector of points) I want to check each track and if they contain points then delete the first one otherwise delete the track. Is this correct?

提前感谢。

推荐答案

向量的 erase()无效现有的迭代器,但它返回一个新的迭代器指向被删除的元素之后的元素。这个返回的迭代器可以用来继续迭代向量。

A vector's erase() invalidates existing iterators, but it returns a new iterator pointing to the element after the one that was removed. This returned iterator can be used to continue iterating over the vector.

可以写成这样:

vector< vector<Point> >::iterator track = tracks_.begin();
while (track != tracks_.end()) {
    if (track->empty()) {
        // if track is empty, remove it
        track = tracks_.erase(track);
    }
    else {
        //if there are points, deque
        track->erase(track->begin());
        ++track;
    }
}

这篇关于在迭代时删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆