迭代时删除

nac*_*o4d 13 c++ stl

可能重复:
Vector.erase(Iterator)导致错误的内存访问
迭代向量,删除某些项目.

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

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... ;(
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有一个矢量点(2英寸)矢量我称之为轨道(1个轨道是1个点矢量)我想检查每个轨道,如果它们包含点,则删除第一个,否则删除轨道.它是否正确?

提前致谢.

sth*_*sth 34

向量erase()使现有迭代器无效,但它返回一个新的迭代器,该迭代器指向被移除的元素之后的元素.返回的迭代器可用于继续迭代向量.

你的循环可以像这样写:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)