std::vector<T,Allocator>::vector
vector() : vector(Allocator()) {}
|
(1) | (depuis C++11) (jusqu'à C++17) |
vector() noexcept(noexcept(Allocator())) : vector(Allocator()) {}
|
(depuis C++17) (constexpr depuis C++20) |
|
explicit vector( const Allocator& alloc = Allocator() );
|
(2) | (jusqu'à C++11) |
explicit vector( const Allocator& alloc );
|
(depuis C++11) (noexcept depuis C++17) (constexpr depuis C++20) |
|
explicit vector( size_type count,
const Allocator& alloc = Allocator() );
|
(3) | (depuis C++11) |
explicit vector( size_type count, const T& value = T(),
const Allocator& alloc = Allocator() );
|
(4) | (jusqu'à C++11) |
vector( size_type count, const T& value,
const Allocator& alloc = Allocator() );
|
(depuis C++11) (constexpr depuis C++20) |
|
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
|
(5) | (constexpr depuis C++20) |
template< container-compatible-range<T> R >
constexpr vector( std::from_range_t, R&& rg,
const Allocator& alloc = Allocator() );
|
(6) | (depuis C++23) |
vector( const vector& other );
|
(7) | (constexpr depuis C++20) |
vector( vector&& other );
|
(8) | (depuis C++11) (noexcept depuis C++17) (constexpr depuis C++20) |
vector( const vector& other, const Allocator& alloc );
|
(9) | (depuis C++11) (constexpr depuis C++20) (jusqu'à C++23) |
constexpr vector( const vector& other,
const std::type_identity_t<Allocator>& alloc );
|
(depuis C++23) | |
vector( vector&& other, const Allocator& alloc );
|
(10) | (depuis C++11) (constexpr depuis C++20) (jusqu'à C++23) |
constexpr vector( vector&& other,
const std::type_identity_t<Allocator>& alloc );
|
(depuis C++23) | |
vector( std::initializer_list<T> init,
const Allocator& alloc = Allocator() );
|
(11) | (depuis C++11) |
Construit un nouveau vector à partir d'une variété de sources de données, en utilisant éventuellement un allocateur fourni par l'utilisateur alloc.
vector vide avec un allocateur construit par défaut.Allocator n'est pas DefaultConstructible, le comportement est indéfini.vector vide avec l'allocateur donné alloc.vector avec count objets insérés par défaut de type T. Aucune copie n'est effectuée.vector avec count copies d'éléments de valeur value.
|
Si |
(depuis C++11) |
vector avec le contenu de la plage [first, last). Chaque itérateur dans [first, last) est déréférencé exactement une fois.
|
Si |
(jusqu'à C++11) |
|
Cette surcharge participe à la résolution de surcharge uniquement si Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
|
(depuis C++11) |
vector avec le contenu de la plage rg. Chaque itérateur dans rg est déréférencé exactement une fois.Tn'est pas EmplaceConstructible dansstd::vector<T>à partir de*ranges::begin(rg).Rne modélise ni sized_range ni forward_range, etTn'est pas MoveInsertable dansstd::vector<T>.
vector avec le contenu de other.|
L'allocateur est obtenu comme en appelant |
(depuis C++11) |
other.get_allocator().alloc est utilisé comme allocateur.alloc est utilisé comme allocateur.vector(il.begin(), il.end(), alloc).Paramètres
| alloc | - | allocateur à utiliser pour toutes les allocations mémoire de ce conteneur |
| count | - | la taille du conteneur |
| value | - | la valeur pour initialiser les éléments du conteneur |
| first, last | - | la paire d'itérateurs définissant la plage d'éléments à copier |
| other | - | un autre conteneur à utiliser comme source pour initialiser les éléments du conteneur |
| init | - | liste d'initialisation pour initialiser les éléments du conteneur |
| rg | - | une plage compatible avec le conteneur |
Complexité
-
Si
InputItsatisfait aux exigences de LegacyForwardIterator , alors :
-
-
Le constructeur de copie de
Tn'est appelé que N fois. - Aucune réallocation ne se produit.
-
Le constructeur de copie de
- Sinon :
-
-
Le constructeur de copie de
Test appelé O(N) fois. - La réallocation se produit O(log N) fois.
-
Le constructeur de copie de
|
(jusqu'à C++26) |
|
(depuis C++26) |
-
- Initialise exactement N éléments à partir du résultat du déréférencement des itérateurs successifs de rg .
- Aucune réallocation ne se produit.
- Sinon :
-
-
Le constructeur de copie ou de déplacement de
Test appelé O(N) fois. - La réallocation se produit O(log N) fois.
-
Le constructeur de copie ou de déplacement de
Exceptions
Les appels à Allocator :: allocate peuvent lever des exceptions.
Notes
Après la construction par déplacement d'un conteneur (surcharge (8)), les références, pointeurs et itérateurs qui se référaient initialement aux éléments dans other restent valides, mais se réfèrent aux éléments qui sont maintenant dans *this. La norme actuelle garantit cela via l'énoncé général dans [container.reqmts]/67, et une garantie plus directe est à l'étude via LWG issue 2321.
| Macro de test de fonctionnalité | Valeur | Norme | Fonctionnalité |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | compatibles avec les Ranges construction et insertion ; surcharge (6) |
Exemple
#include <iostream> #include <string> #include <vector> template<typename T> std::ostream& operator<<(std::ostream& s, const std::vector<T>& v) { s.put('{'); for (char comma[]{'\0', ' ', '\0'}; const auto& e : v) s << comma << e, comma[0] = ','; return s << "}\n"; } int main() { // Syntaxe de liste d'initialisation C++11 : std::vector<std::string> words1{"the", "frogurt", "is", "also", "cursed"}; std::cout << "1: " << words1; // words2 == words1 std::vector<std::string> words2(words1.begin(), words1.end()); std::cout << "2: " << words2; // words3 == words1 std::vector<std::string> words3(words1); std::cout << "3: " << words3; // words4 est {"Mo", "Mo", "Mo", "Mo", "Mo"} std::vector<std::string> words4(5, "Mo"); std::cout << "4: " << words4; const auto rg = {"cat", "cow", "crow"}; #ifdef __cpp_lib_containers_ranges std::vector<std::string> words5(std::from_range, rg); // surcharge (6) #else std::vector<std::string> words5(rg.begin(), rg.end()); // surcharge (5) #endif std::cout << "5: " << words5; }
Sortie :
1: {the, frogurt, is, also, cursed}
2: {the, frogurt, is, also, cursed}
3: {the, frogurt, is, also, cursed}
4: {Mo, Mo, Mo, Mo, Mo}
5: {cat, cow, crow}
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 134 | C++98 |
la surcharge
(
5
)
autorisait jusqu'à
2N
appels au constructeur
de copie dans le cas des itérateurs d'entrée |
modifié en O(N) appels |
| LWG 438 | C++98 |
la surcharge
(
5
)
n'appelait la surcharge
(
4
)
que si
InputIt
était un type intégral
|
appelle la surcharge
(
4
)
si
InputIt
n'est pas un LegacyInputIterator |
| LWG 2193 | C++11 | le constructeur par défaut était explicite | rendu non-explicite |
| LWG 2210 | C++11 | la surcharge ( 3 ) n'avait pas de paramètre allocateur | paramètre ajouté |
| N3346 | C++11 |
pour la surcharge
(
3
)
, les éléments du
conteneur étaient initialisés par valeur |
ils sont insérés par défaut |
Voir aussi
|
assigne des valeurs au conteneur
(fonction membre publique) |
|
|
assigne des valeurs au conteneur
(fonction membre publique) |