相关疑难解决方法(0)

从std :: vector连续删除的安全方法?

我认为以下代码可以工作,但是当目标小部件位于向量的末尾时,它会崩溃.

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但是因为这是事件驱动的,所以很好.我只是不知道为什么会失败.当它,'它'==小部件.

谢谢

c++ iterator vector

2
推荐指数
1
解决办法
3186
查看次数

擦除元素时std :: vector中可能存在的不一致

在调试向量时,我发现不一致.假设以下代码尝试从只有一个元素的向量中删除一个条目

#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)

c++ vector

2
推荐指数
1
解决办法
184
查看次数

如何在不复制迭代器和没有内存泄漏的情况下擦除STL向量中的元素?

这是编辑过的代码

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

内在的同时循环回到某一点.链接丢失.擦除元素而不复制迭代器并且在后循环中没有内存泄漏并再次向前移动?

c++ memory iterator stl vector

-5
推荐指数
1
解决办法
360
查看次数

标签 统计

c++ ×3

vector ×3

iterator ×2

memory ×1

stl ×1