我认为以下代码可以工作,但是当目标小部件位于向量的末尾时,它会崩溃.
for(std::vector<AguiWidget*>::iterator it = children.begin();
it != children.end(); ++it)
{
if((*it) == widget)
it = children.erase(it);
}
Run Code Online (Sandbox Code Playgroud)
我想要它通过并删除它找到的小部件的任何实例.我知道这个方法是N ^ 2但是因为这是事件驱动的,所以很好.我只是不知道为什么会失败.当它,'它'==小部件.
谢谢
在调试向量时,我发现不一致.假设以下代码尝试从只有一个元素的向量中删除一个条目
#include <iostream>
#include <vector>
std::vector<int> v;
void myremove(int);
int main()
{
v.push_back(10);
std::cout << "10 pushed back\n";
myremove(10);
std::cout << "done :)\n";
return 0;
}
void myremove( int a )
{
std::vector<int>::iterator it = v.begin();
int counter = 0;
for ( ; it != v.end(); it++ ) {
std::cout << "iterating for " << counter << " times and vector size is " << v.size() << "\n";
if ( a == (*it) ) {
v.erase(it);
std::cout << "removed " …Run Code Online (Sandbox Code Playgroud) 这是编辑过的代码
Run Code Online (Sandbox Code Playgroud)vector<vector<int> > vec; vector<vector<int> >::iterator vit; vector<int>::iterator it; for ( vit = vec.begin(); vit != vec.end(); ++vit) { it = vit->begin(); while(it != vit->end()) { while(it != vit->end()) { if( condition ) { while( condition ) { //going back to certain it //erase an element it = vit->erase(it); } } else ++it; } ++it; } }内在的同时循环回到某一点.链接丢失.擦除元素而不复制迭代器并且在后循环中没有内存泄漏并再次向前移动?