递增的vector数组
原生数组和vector、array都不支持构造一个递增的数组,好比一个包含0~999的size为1000的数组。ios
int ids[1000] = {}; for (int i = 0; i < 1000; ++i) { ids[i] = i; }
若是是std::vector,则是:数组
std::vector<int> ids; ids.resize(1000); for (int i = 0; i < 1000; ++i) { ids[i] = i; }
也有人用使用lambda表达式来实现spa
如今介绍C++11新增的std::iota,须要包含头文件numeric
可能的实现:
官方文档:https://en.cppreference.com/w/cpp/algorithm/iota
.net
template<class ForwardIterator, class T> void iota(ForwardIterator first, ForwardIterator last, T value) { while(first != last) { *first++ = value; ++value; } }
使用举例1,我用的好像能够:code
#include <numeric> #include <iostream> #include <vector> #include <iterator> std::vector<size_t> idx(scores.size()); std::iota(idx.begin(), idx.end(), 0);
这个没试: blog
#include <numeric> #include <iostream> #include <vector> #include <iterator> int main() { std::vector<int> ivec(10); std::iota(ivec.begin(), ivec.end(), 4); //for (auto &it: ivec) //{ // std::cout << it << " "; //} //或者用下面的一句话输出ivec中内容 std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, " ")); getchar(); return 0; }
std::iota(ivec.begin(), ivec.end(), 4);