集合上的无限循环
Infinite loop over collection
如何以无限的方式迭代std::向量?假设我有
std::vector<int> myvect {1, 2, 3, 4};
我想像1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1...
一样循环
当然有多种方法,但我想知道是否有一种标准/优雅的方法可以做到这一点。我查了<algorithm>
,但什么也找不到。
谢谢。
没有绝对的标准方法。
我会这样写:
for(;;) // the standard/traditional way to write "forever"
{
for(auto x : myvect) // the new way to iterate over a vector
{
//
}
}
有几种方法可以做到这一点。正如@Debasish Jana已经指出的那样,您可以编写
while ( true )
{
for ( int x : myvect ) std::cout << x << ", ";
}
我想你指的不是std::vector<i> myvect {1, 2, 3, 4};
而是std::vector<int> myvect {1, 2, 3, 4};
或者你可以写
for ( std::vector<int>::size_type i = 0; i < nyvect.size(); i = ( i + 1 ) % myvect.size() )
{
std::cout << x << ", ";
}
如果矢量为空,则不会执行此循环。
等等。:)
index = 0;
while(true)
{
//Access your vector element using index
index = ( index + 1 ) % length;
}
其中,length是您拥有的元素总数。
while (true) {
// iterate myvect
for (int i=0; i<myvect.size(); i++) {
std::cout << myvect[i] << ", ";
}
}
c++:
std::vector<int> myvect {1, 2, 3, 4};
std::vector<int>::iterator vecIter = myvect.begin();
while(1){
for(vecIter = myvect.begin();vecIter != myvect.end();++vecIter){
std::cout << *vecIter << " " << ;
}
}
c++11x:
std::vector<int> myvect {1, 2, 3, 4};
while(1){
for(int i :myvect){
std::cout << i << " " << ;
}
}
您可以执行以下操作:
#include <iterator>
template<class Container> class ever_t {
struct iterator {
typename Container::iterator b, e, v;
iterator& operator++() { ++v; if( v == e ) v = b; return *this; };
iterator operator!() { return {b, e, e}; };
bool operator!=(const iterator& o) { return b != o.b || e != o.e || v != o.v; };
typename Container::iterator::reference operator*() { return *v; };
} b;
public:
ever_t(Container& c_) : b{std::begin(c_), std::end(c_), std::begin(c_)} {};
iterator begin() { return b; }
iterator end() { return !b; }
};
template<class Container> ever_t<Container> ever(Container& c) { return ever_t<Container>(c); }
#include <iostream>
#include <vector>
int main() {
std::cout << "oi" << std::endl;
std::vector<int> i { 1, 2, 3, 4 };
std::vector<int> empty;
for( auto x: ever(empty) ) { // never enters here
std::cout << x << std::endl;
}
for( auto x: ever(i) ) {
std::cout << x << std::endl;
}
}
尽管除了过于夸张之外,您最终还需要一个break
,这样您的程序才能停止。:D
for(unsigned i=0;true;++i)
do_something( myvect[i%4] );
将执行
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 连接线程时的无限循环
- 为什么这种方法会进入无限循环?
- 由于QTextStream的无限循环
- Qt 在另一个线程中无限循环
- 从文件 C++ 读取时的无限循环
- 集合上的无限循环