I want to use a special method to initialize a std::vector<unsigned int>
which is described in a C++ book I use as a reference (the German book 'Der C++ Programmer' by Ulrich Breymann, in case that matters). In that book is a section on sequence types of the STL, referring in particular to list
, vector
and deque
. In this section he writes that there are two special constructors of such sequence types, namely, if X
refers to such a type,
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)
I want to use the second one for an interval of unsigned int
, that is
std::vector<unsigned int> l(1U, 10U);
to get a list initialized with {1,2,...,9}
. What I get, however, is a vector with one unsigned int
with value 10 😐 Does the second variant exist, and if yes, how do I force that it is called?
Best Answer
there are at least three ways that you can do that. One was mentioned earlier by Brian
You can also use std::iota if you are using c++11
Or instead you can initialize your container with 1s and then do a partial sum on that. I don't think anybody will use this third method anyway :)