嗨,我写了这个,但运行时我遇到了一些错误
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个点矢量)我想检查每个轨道,如果它们包含点,则删除第一个,否则删除轨道.它是否正确?
提前致谢.
我正在使用C++上的迭代器,我在这里遇到了一些麻烦.它在行interIterator ++上的表达式(this - > _ Has_container())上说"Debug Assertion Failed".距离列表是向量<vector <DistanceNode >>.我做错了什么?
vector< vector<DistanceNode> >::iterator externIterator = distanceList.begin();
while (externIterator != distanceList.end()) {
vector<DistanceNode>::iterator interIterator = externIterator->begin();
while (interIterator != externIterator->end()){
if (interIterator->getReference() == tmp){
//remove element pointed by interIterator
externIterator->erase(interIterator);
} // if
interIterator++;
} // while
externIterator++;
} // while
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(7);
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
if (*it == 7)
v.erase(it);
cout << *it << endl;
}
Run Code Online (Sandbox Code Playgroud)
问题是,for循环不会停止运行并打印垃圾值。您能否对这个问题给出一些见解...比如最后一个元素可能存储有关大小或地址的信息end()?
使用该erase()方法对于向量中的其他位置(最后一个元素除外)效果很好。
控制台日志显示垃圾值,如下所示:
34603778
35652354
50397954
34603592
34603536
34603536
34603536
34603536
34603794
36700688
34603536
34603536
34865684
51511824
34603536
34865680
Run Code Online (Sandbox Code Playgroud)