Tho*_*mas 9 c++ stl initialization std stdvector
我想使用一种特殊的方法来初始化一个std::vector<unsigned int>
我在其中作为参考的C++书籍中描述的内容(德国着作"Ulrich Breymann的Der C++ Programmer",如果重要的话).在这本书是关于序列类型的STL的部分,特别是指list
,vector
和deque
.在本节中,他写道,这种序列类型有两个特殊的构造函数,即,如果X
引用这样的类型,
X(n, t) // creates a sequence with n copies of t
X(i, j) // creates a sequence from the elements of the interval [i, j)
Run Code Online (Sandbox Code Playgroud)
我希望使用第二个间隔unsigned int
,即
std::vector<unsigned int> l(1U, 10U);
Run Code Online (Sandbox Code Playgroud)
获取初始化的列表{1,2,...,9}
.然而,我得到的是一个unsigned int
值为10 的向量: - | 第二个变体是否存在,如果存在,我该如何强制它被调用?
Man*_*far 20
至少有三种方法可以做到这一点.Brian先前提到过一个
//method 1
generate(v.begin(), v.end(), [] { static int i {1}; return i++; });
Run Code Online (Sandbox Code Playgroud)
如果使用的是c ++ 11,也可以使用std :: iota
//method 2
iota(v.begin(), v.end(), 1);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用1s初始化容器,然后对其进行部分求和.我认为没有人会使用这第三种方法:)
//method 3
vector<int> v(n, 1);
partial_sum(v.begin(), v.end(), v.begin());
Run Code Online (Sandbox Code Playgroud)
Moo*_*uck 10
重读那里附近的段落,描述每个参数是什么.具体来说,它应该提到i
并且j
不是值,而是迭代器.此构造函数通常用于制作其他类型容器的副本.如果你想获得一系列值,Boost库提供了一个计数迭代器,它完全符合你的要求.
std::vector<unsigned int> numbers(
boost::counting_iterator<unsigned int>(0U),
boost::counting_iterator<unsigned int>(10U));
Run Code Online (Sandbox Code Playgroud)