当前位置: 首页 > 知识库问答 >
问题:

转到基于范围的for循环中的下一个迭代器

白淇
2023-03-14

对于我的项目,我需要使循环中的迭代器转到容器中的下一项,执行一些操作,然后再次返回到同一迭代器,然后继续,然而,由于某种原因,advancenext,然后使用prev似乎都不起作用。那么,我怎样才能得到下一个迭代器,然后返回到上一个迭代器呢?

我收到以下错误消息:

no matching function for call to 'next(int&)'
no type named 'difference_type' in 'struct std::iterator_traits<int>'

非常感谢。

template<class T>
void insert_differences(T& container)
{

    for(auto it : container){
        // do some operations here
        //advance(it,1);
        it = next(it); 
        // do some operations here 
        //advance(it, -1);
        it = prev(it);
        }

}

共有1个答案

方航
2023-03-14

基于范围的循环迭代元素。名字it在这里很混乱;它不是迭代器,而是元素,这就是为什么std::Nextstd::prev不能使用它。

在一个范围内执行for循环。

作为一种更具可读性的等价物,用于对一系列值(例如容器中的所有元素)进行操作的传统for循环。

你必须自己用迭代器编写循环,比如

for(auto it = std::begin(container); it != std::end(container); it++){
    // do some operations here
    //advance(it,1);
    it = next(it); 
    // do some operations here 
    //advance(it, -1);
    it = prev(it);
}
 类似资料:
  • java中是否存在跳过for循环其余部分的令牌?类似VB的东西在Java中继续。

  • 问题内容: Java中是否有一个令牌可以跳过其余的for循环?Java中类似VB的Continue。 问题答案: 关键字将在调用时开始下一次迭代 例如 这将打印 看到 文件

  • 由于valgrind中出现了一些分段错误和警告,我发现这段代码不正确,并且在for range循环中有一些悬而未决的引用。 看起来好像开始和结束是从一个临时循环中提取的,并且在循环中丢失了。 当然,一种方法是 然而,我想知道为什么for(auto e:f()[5])是一个错误,以及是否有更好的方法或某种方法来设计f,甚至容器(

  • 如何进入JavaScript循环的下一次迭代? 例如: MDN文档只提到完全脱离循环,而不是转移到下一个迭代。

  • 在临时范围上基于范围的for循环中,Barry提到以下内容不受被破坏的临时对象的影响,我测试的成员v确实存在于for循环的整个循环中(因为在for循环的整个循环中没有调用析构函数X)。解释是什么?

  • 问题内容: 我想知道为什么在 i 变量下面的代码中 仍然显示“ 5” 而不是显示 “ 1” 然后 “ 2” 然后 “ 3” ,依此类推?必须是一个范围问题,但由于在全局和dom范围中更改了i变量的范围,但仍然遇到相同的问题,因此我并没有真正了解它。当我提醒 我 的AJAX功能外,它工作得很好。 这是小提琴 编辑: 我选择了 @Tushar Gupta 解决方案,因为它最适合我的需要,但是又遇到了另