如何在for循环中一次使用两个连续的双端队列元素?

时间:2016-03-23 13:19:42

标签: c++ stl iterator deque

我必须从deque(从头到尾)处理元素,但是在每个iteraton我需要使用一个元素,然后是下一个元素。所以我试着写一个以mydeque.begin()开头的for循环,并在mydeque [mydeque.size() - 1]结束。也;我想知道我的迭代器deque :: iterator是否有下一个方法(it-> next()),以便进行像* it - * it-> next()这样的操作。非常感谢你。

2 个答案:

答案 0 :(得分:0)

编辑:我的初步解决方案确实有点容易出错且不准确。

这可以使用迭代器轻松完成,请参阅以下小例子:

#include <deque>
#include <iostream>

int main() {
    std::deque<int> test = {1,2,3,4,5,6,7};
    for(auto i = test.begin(); i != test.end(); ++i) {
        auto next = std::next(i);
        if(next != test.end()) {
            std::cout << *i << " " << *next << std::endl;
        }
    }
}

你可以简单地将迭代器增加2并使用std::next来选择以下项目(因为std :: next的偏移默认为1)。

答案 1 :(得分:0)

以下是:

#include <deque>
#include <iostream>

int main() {
std::deque<int> test = {1,2,3,4,5,6,7,8};
for(auto i = test.begin(); i != test.end(); i++) {
    auto next = std::next(i);
    std::cout << *i << *next << std::endl;
    if(next==test.end())
      {
       //Do something. This is the last element.
       break;
      }

}
}

编辑:注意只有一个元素的deques。通过执行if(test.begin()==test.end())等检查来执行此操作。