遞增的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);