L'initialisation de std::vector<unsigned int> avec une liste de jours entiers non signés
Je veux utiliser une méthode spéciale pour initialiser un std::vector<unsigned int>
qui est décrit en C++ livre que j'ai utiliser comme référence (le livre allemand "Der Programmeur C++" par Ulrich Breymann, en cas que les questions). Dans ce livre, est une section sur les types de séquence de la STL, en se référant en particulier à list
, vector
et deque
. Dans cette section, il écrit qu'il y a deux constructeurs de ces types de séquence, à savoir, si X
fait référence à un 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)
Je veux utiliser le second pour un intervalle de unsigned int
, c'est-à
std::vector<unsigned int> l(1U, 10U);
pour obtenir une liste initialisée avec {1,2,...,9}
. Ce que j'ai, cependant, est un vecteur avec un unsigned int
avec la valeur 10 😐 est-ce que la deuxième variante existe, et si oui, comment puis-je la force qu'elle s'appelle?
Vous devez vous connecter pour publier un commentaire.
Relire les paragraphes près de là décrivant la fonction de chacun des paramètres. Plus précisément, il convient de mentionner que
i
etj
ne sont pas des valeurs, mais itérateurs. Ce constructeur est très couramment utilisé pour faire des copies d'autres types de conteneurs. Si vous souhaitez obtenir une séquence de valeurs, la Bibliothèque Boost fournit un comptage itérateur, qui fait exactement ce que vous voulez.il y a au moins trois façons que vous pouvez faire. L'un a été mentionné plus tôt de Brian
Vous pouvez également utiliser std::iota si vous êtes à l'aide de c++11
Ou au contraire, vous pouvez initialiser votre récipient avec 1s et puis faire un somme partielle sur que. Je ne pense pas que quelqu'un va utiliser cette troisième méthode, de toute façon 🙂
partial_sum(v.begin(), v.end(), v.begin())
et pour n = 5, vous obtenez {1, 3, 6, 10, 15}.generate
ici utilise statique. Le mettre dans une fonction, l'appeler plusieurs fois et il va continuer à compter. UtilisationValueType i = {1}; std::generate(first, last, [&i] { return i++; });
à la place.Un non-boost façon de le faire avec un auto-incrémentation d'itérateur.
C++11:
Pas, que la variante n'existe pas. Le deuxième constructeur initialise un vecteur à partir de deux itérateurs ce point dans une autre séquence.
Voici un exemple de la "deux-itérateur" constructeur en action: