din*_*dum 18 c++ syntax for-loop syntactic-sugar c++11
实际上这些是两个相关的问题.
我知道C++ 11中有一种新的语法,用于for表单的基于范围的循环:
//v is some container
for (auto &i: v){
// Do something with i
}
Run Code Online (Sandbox Code Playgroud)
第一个问题:我怎样才能推断出我在这个循环中的迭代次数?(假设我想在位置j处填充值为j的向量).
第二个问题:我想知道是否还有其他方法来编写表单的循环
for (int i=0; i<100; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
我发现这种编写方式有点麻烦,我经常这样做,我希望有一个更简洁的语法.一些事情:
for(i in [0..99]){ ... }
Run Code Online (Sandbox Code Playgroud)
会很好.
对于这两个问题,我希望避免使用其他库.
Mik*_*our 21
第一个答案:你没有.你为简单的目的使用了一个简单的结构; 如果你有更复杂的需求,你将需要更复杂的东西.
第二个答案:你可以创建一个产生连续整数值的迭代器类型,以及一个给出一系列范围的"容器"类型.除非你有充分的理由亲自去做,Boost有这样的事情:
#include <boost/range/irange.hpp>
for (int i : boost::irange(0,100)) {
// i goes from 0 to 99 inclusive
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*r K 15
用这个:
size_t pos = 0;
for (auto& i : v) {
i = pos;
++pos;
}
Run Code Online (Sandbox Code Playgroud)
(提升很好,但并不是普遍接受的.)
Rei*_*ica 11
对于第一个问题,答案很简单:如果需要迭代计数,请不要使用抽象迭代计数的语法结构.只需使用普通for循环而不是基于范围的循环.
对于第二个问题,我认为目前标准库中没有任何内容,但您可以使用boost::irange它:
for (int i : boost::irange(0, 100))
Run Code Online (Sandbox Code Playgroud)