Copia un oggetto contenitore vettoriale in C++
- Usa la notazione della lista degli inizializzatori per copiare un oggetto contenitore vettoriale in C++
-
Usa l’algoritmo
std::copy
per copiare un oggetto contenitore vettoriale in C++ - Utilizzare l’operatore di assegnazione di copia per copiare un oggetto contenitore vettoriale in C++
- Usa il costruttore di copia per copiare un oggetto contenitore vettoriale in C++
-
Usare la funzione membro
assign
per copiare un oggetto contenitore vettoriale in C++
Questo articolo spiega diversi metodi su come copiare un oggetto contenitore std::vector
in C++.
Usa la notazione della lista degli inizializzatori per copiare un oggetto contenitore vettoriale in C++
Lo std::vector
è la struttura dati di base fornita nella libreria dei contenitori STL. Implementa elementi array di dimensioni dinamiche i cui elementi sono archiviati in modo contiguo. La gestione della memoria viene eseguita automaticamente quando l’utente aggiunge o rimuove elementi dall’array. Possiamo fare una copia dell’oggetto vettore usando la notazione della lista di inizializzatori quando costruiamo una nuova variabile del tipo std::vector
. Nota che abbiamo solo bisogno di passare gli iteratori begin
e end
dell’oggetto vettoriale originale che deve essere copiato in un nuovo oggetto. Utilizzando la stessa notazione, puoi estrarre qualsiasi sottovettore dell’oggetto specificando gli iteratori corrispondenti come argomenti tra parentesi graffe.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = {vec1.begin(), vec1.end()};
vector<int> vec1_cc = {vec1.begin(), vec1.end() - 4};
printVector(vec1_c);
printVector(vec1_cc);
return EXIT_SUCCESS;
}
Produzione:
23;
43;
324;
222;
649;
102;
40;
304;
23;
43;
324;
222;
Usa l’algoritmo std::copy
per copiare un oggetto contenitore vettoriale in C++
Un altro metodo per copiare l’oggetto std::vector
è invocare la funzione std::copy
dalla libreria degli algoritmi STL. Fornisce l’operazione di copia generica per gli oggetti basati su intervallo. La funzione ha più overload, ma l’overload utilizzato nel seguente frammento di codice accetta tre argomenti dell’iteratore. I primi due specificano l’intervallo del vettore originale, mentre il terzo iteratore indica l’inizio dell’intervallo del vettore di destinazione.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1.size());
copy(vec1.begin(), vec1.end(), vec1_c.begin());
printVector(vec1_c);
return EXIT_SUCCESS;
}
Produzione:
23;
43;
324;
222;
649;
102;
40;
304;
Utilizzare l’operatore di assegnazione di copia per copiare un oggetto contenitore vettoriale in C++
In alternativa, è possibile utilizzare l’operatore di assegnazione della copia per copiare il contenuto dell’oggetto contenitore std::vector
. Questa notazione è la soluzione più concisa per questo problema. Abbiamo solo bisogno di assegnare la variabile del vettore originale all’oggetto vettore appena dichiarato.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = vec1;
printVector(vec1_c);
return EXIT_SUCCESS;
}
Produzione:
23;
43;
324;
222;
649;
102;
40;
304;
Usa il costruttore di copia per copiare un oggetto contenitore vettoriale in C++
D’altra parte, un costruttore di copie della classe std::vector
offre un metodo simile per copiare il vettore in un oggetto vettoriale appena dichiarato. In questo caso, dobbiamo passare la variabile del vettore originale tra parentesi quando viene dichiarata la variabile del vettore appena creata.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1);
printVector(vec1_c);
return EXIT_SUCCESS;
}
Produzione:
23;
43;
324;
222;
649;
102;
40;
304;
Usare la funzione membro assign
per copiare un oggetto contenitore vettoriale in C++
Il contenitore std::vector
fornisce la funzione membro assign
, che puoi utilizzare per sostituire il contenuto di un oggetto vettoriale con gli elementi di un altro vettore. Si noti che possiamo inizializzare un contenitore vettore
vuoto e quindi invocare la funzione assign
dall’oggetto per copiare il contenuto di un altro vettore.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c;
vec1_c.assign(vec1.begin(), vec1.end());
printVector(vec1_c);
return EXIT_SUCCESS;
}
Produzione:
23;
43;
324;
222;
649;
102;
40;
304;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook