Chi*_*iel 3 c++ initializer-list c++11
是否可以借助初始化程序列表或其他C++功能将两个初始化行合并为单个语句?向量值始终以1递增,但大小n不固定.
#include <numeric>
#include <vector>
#include <iostream>
int main()
{
int n = 10;
// Can the two lines below be combined into a single statement?
std::vector<int> v(n);
std::iota(v.begin(), v.end(), 1);
for (int i : v)
std::cout << i << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Bau*_*gen 12
你可以使用Boost.counting_iterator:
std::vector<int> v(boost::counting_iterator<int>(1),
boost::counting_iterator<int>(n + 1));
Run Code Online (Sandbox Code Playgroud)
(现场)现在,这是否值得,比您已经拥有的更容易阅读,供您决定.
不是,不是.如果n是一个运行时变量,你可能做的最好的事情就是把它放在某个函数中:
std::vector<int> ints(int n) {
std::vector<int> v;
v.reserve(n);
for (int i = 0; i < n; ++i) {
v.push_back(n+1);
}
return v;
}
// now it's one line?
std::vector<int> v = ints(n);
Run Code Online (Sandbox Code Playgroud)
如果是编译时间,您可以使用std::index_sequence提供初始化列表:
template <int... Is>
std::vector<int> ints(std::integer_sequence<int, Is...> ) {
return std::vector<int>{ (Is+1)... };
}
template <int N>
std::vector<int> ints() {
return ints(std::make_integer_sequence<int, N>{});
}
Run Code Online (Sandbox Code Playgroud)
但不管怎样,你需要一个辅助函数.