std::vector::vector
| (1) | ||
vector(); |
||
vector() noexcept(noexcept(Allocator())); |
||
| (2) | ||
explicit vector( const Allocator& alloc ); |
||
explicit vector( const Allocator& alloc ) noexcept; |
||
| (3) | ||
explicit vector( size_type count, {{#pad:|6}} const T& value = T(), {{#pad:|6}} const Allocator& alloc = Allocator()); |
(fino al c++11) | |
vector( size_type count, {{#pad:|6}} const T& value, {{#pad:|6}} const Allocator& alloc = Allocator()); |
(dal C++11) | |
| (4) | ||
explicit vector( size_type count ); |
(dal C++11) (fino al c++14) |
|
explicit vector( size_type count, const Allocator& alloc = Allocator() ); |
(dal C++14) | |
template< class InputIt > vector( InputIt first, InputIt last, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(5) | |
vector( const vector& other ); |
(6) | |
vector( const vector& other, const Allocator& alloc ); |
(6) | (dal C++11) |
| (7) | ||
vector( vector&& other ); |
(dal C++11) | |
vector( vector&& other ) noexcept; |
||
vector( vector&& other, const Allocator& alloc ); |
(8) | (dal C++11) |
vector( std::initializer_list<T> init, {{#pad:|6}} const Allocator& alloc = Allocator() ); |
(9) | (dal C++11) |
Costruisce un nuovo container da una varietà di origini, eventualmente utilizzando un allocatore alloc fornito dall'utente.
alloc.count copie di elementi di valore value.[first, last).
Questo costruttore ha lo stesso effetto di vector(static_cast<size_type>(first), static_cast<value_type>(last), a) se InputIt è un integral type. |
(fino al c++11) |
Questi overload partecipano nella overload resolution solo se InputIt soddisfa LegacyInputIterator, per evitare ambiguità con l'overload (3). |
(dal C++11) |
other. Se alloc non viene fornito, allocator viene ottenuto come se fosse stato invocato std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()).other utilizzando la move semantics. L'allocator è ottenuto per move-construction dall'allocator appartenente a other. Dopo il move, è garantito che other.empty() restituirà true.alloc come allocator per il nuovo container, muovendo il contenuto da other; se alloc != other.get_allocator(), questo si traduce in un move elemento per elemento. (in questo caso, non vi è garanzia che other sia vuoto dopo il move)init. Parametri
| alloc | - | allocator da utilizzare per tutte le allocazioni di memoria di questo container |
| count | - | la dimensione del container |
| value | - | il valore con cui inizializzare gli elementi del container |
| first, last | - | il range da cui copiare gli elementi |
| other | - | un secondo container da utilizzare come sorgente per inizializzare gli elementi del nuovo container |
| init | - | initializer list per inizializzare gli elementi del container |
Complessità
countfirst e lastotheralloc != other.get_allocator(), altrimenti costante.init.Eccezioni
Chiamate a Allocator::allocate possono lanciare eccezioni.
Note
Dopo la move construction del container (overload (7)), riferimenti, puntatori e iteratori (diversi da end) a other rimangono validi, ma si riferiscono a elementi che ora si trovano in *this. Lo standard corrente rende questa garanzia tramite la dichiarazione generale in [container.requirements.general]/12, ed una garanzia più diretta è in esame in LWG 2321.
L'overload (4) azzera gli elementi di non-class types come int, comportamento che non corrisponde a quello di new[], che invece li lascia non inizializzati. Per ottenere lo stesso comportamento, deve essere fornita una custom Allocator::construct che lasci gli elementi non inizializzati.
Esempio
#include <vector>
#include <string>
#include <iostream>
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::vector<T>& v)
{
s.put('[');
char comma[3] = {'\0', ' ', '\0'};
for (const auto& e : v) {
s << comma << e;
comma[0] = ',';
}
return s << ']';
}
int main()
{
// c++11 initializer list syntax:
std::vector<std::string> words1 {"the", "frogurt", "is", "also", "cursed"};
std::cout << "words1: " << words1 << '\n';
// words2 == words1
std::vector<std::string> words2(words1.begin(), words1.end());
std::cout << "words2: " << words2 << '\n';
// words3 == words1
std::vector<std::string> words3(words1);
std::cout << "words3: " << words3 << '\n';
// words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"}
std::vector<std::string> words4(5, "Mo");
std::cout << "words4: " << words4 << '\n';
}
Output:
words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]
Defect reports
Template:dr list begin Template:dr list item Template:dr list end
See also
assegna valori al contenitore Original: assigns values to the container The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (metodo pubblico) | |
assegna valori al contenitore Original: assigns values to the container The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (metodo pubblico) | |