脚本宝典收集整理的这篇文章主要介绍了小二,给我来一个递增序列,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
有些时候,我们急需用一段递增序列来初始化容器。这时候,我们可能会首先想起 std::fill
, 但如果真正熟悉这个函数,会知道这货也就能用一个单一数值填满你的容器。或许你开始一筹莫展,决定土办法,一个循环,push 递增。@H_512_4@
C++ 11 里有一个比较低调的方法可以一句话实现这个需求。即 std::iota.
好了,小二,赶紧上一盘递增序列。
#include <numeric>
std::vector<int> ivec(10);
std::iota(ivec.begin(), ivec.end(), 0);
@H_304_40@// ivec: 0,1,2,3,4,5,6,7,8,9
// 这个递增可不止局限于数值哟
std::vector<std::vector<int>::iterator> iter_vec(ivec.size());
std::iota(iter_vec.begin(), iter_vec.end(), ivec.begin());
for (auto it : iter_vec)
std::cout << *it << " ";
// out: 0,1,2,3,4,5,6,7,8,9
实现细节
这个实现比较好理解,其实就是上述的土办法,一个循环搞定。
template<class ForwardIterator, class T>
void iota(ForwardIterator first, ForwardIterator last, T value)
{
while(first != last) {
*first++ = value;
++value;
}
}
C++ 0x的折衷
如果没有 C++11 的环境呢。我们可以借助 std::generate
+ 闭包结构体来模拟实现。
#include <algorithm>
struct IncGenerator {
int current_;
IncGenerator (int start) : current_(start) {}
int operator() () { return current_++; }
};
std::vector<int> ivec(10);
IncGenerator g(0);
std::generate(ivec.begin(), ivec.end(), g);
// ivec: 0,1,2,3,4,5,6,7,8,9
小二摸摸脑袋说,这还不如土办法写个循环呢。。。
以上是脚本宝典为你收集整理的小二,给我来一个递增序列全部内容,希望文章能够帮你解决小二,给我来一个递增序列所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。