c++ - For 循环遍历生长 vector

标签 c++ loops for-loop dynamic vector

我的问题是,下面的 for 循环总是只迭代一次。

在进入循环之前,search_list 的大小始终为 1。但是 search_list vector 可能会在循环内增长,并且应该分别迭代,以防列表中添加了一些元素。

   std::vector<int> search_list;
   search_list.clear();
   search_list.push_back(first_elem);

   for(auto &discover : search_list)
   {
       ......
       if(&std::find(face_ids.begin(), face_ids.end(), i))
       {
           search_list.push_back(i);
       }
       ......
   }

我怎样才能使这个 for 循环根据那个不断增长的 vector 迭代多次?即使将某些内容推送到搜索列表,它也不会迭代多次。如果添加了某些内容,它应该将发现设置为该元素并重新进入循环。

最佳答案

您的问题是迭代器是在您开始循环时创建的,但随后没有更新。 您应该对索引执行 for 循环:

std::vector<int> search_list;
search_list.clear();
search_list.push_back(first_elem);

for (int ii=0 ; ii < search_list.size() ; ii++) {
       ......
       if(&std::find(face_ids.begin(), face_ids.end(), i))
       {
           search_list.push_back(i);
       }
       ......
}

这样,如果添加了一个元素,search_list.size() 会增长并且循环会继续,因为它每次都会调用它。

请注意,如果始终验证 if 语句,这将产生无限循环。

编辑:根据 Félix Cantournet 的建议,这里有一个带有 while 循环和一些控制使其不能无限的版本

int max_it = 1000;
int ii=0;
...
// i = MAGIC
...
while (&std::find(face_ids.begin(), face_ids.end(), i) && ii < max_it) {
       search_list.push_back(i);
       ......
       // i = NEW MAGIC
       ......
       ii++;
}

关于c++ - For 循环遍历生长 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341792/

相关文章:

java - 将字符打印为矩阵

c++ - 在控制结构 block 中定义变量

c++ - 如何通过指针数组访问类的成员函数?

c++ - 错误 : 'class' does not name a type C++

c++ - 可能的 Qt5 错误 : calling setFixedSize() disables the main window's close button (under Win7)

excel - 在列上输入公式

javascript - 函数参数在循环内不起作用

python - 如何使 Pandas 列名提取的迭代循环更加高效?

javascript - 使用javascript选择另一个选项后循环隐藏选项不起作用

php - 使用foreach循环获取数组的值