C++ Inserimento di elementi


Esempio

Aggiunta di un elemento alla fine di un vettore (copiando / spostando):

struct Point {
  double x, y;
  Point(double x, double y) : x(x), y(y) {}
};
std::vector<Point> v;
Point p(10.0, 2.0);
v.push_back(p);  // p is copied into the vector.
C ++ 11

Aggiunta di un elemento alla fine di un vettore costruendo l'elemento al suo posto:

std::vector<Point> v;
v.emplace_back(10.0, 2.0); // The arguments are passed to the constructor of the
                           // given type (here Point). The object is constructed
                           // in the vector, avoiding a copy.

Si noti che std::vector non ha una funzione membro push_front() causa di motivi di prestazioni. L'aggiunta di un elemento all'inizio fa muovere tutti gli elementi esistenti nel vettore. Se si desidera inserire spesso elementi all'inizio del contenitore, è possibile utilizzare invece std::list o std::deque .


Inserimento di un elemento in qualsiasi posizione di un vettore:

std::vector<int> v{ 1, 2, 3 };
v.insert(v.begin(), 9);          // v now contains {9, 1, 2, 3}
C ++ 11

Inserimento di un elemento in qualsiasi posizione di un vettore costruendo l'elemento al suo posto:

std::vector<int> v{ 1, 2, 3 };
v.emplace(v.begin()+1, 9);     // v now contains {1, 9, 2, 3}

Inserimento di un altro vettore in qualsiasi posizione del vettore:

std::vector<int> v(4);      // contains: 0, 0, 0, 0
std::vector<int> v2(2, 10); // contains: 10, 10
v.insert(v.begin()+2, v2.begin(), v2.end()); // contains: 0, 0, 10, 10, 0, 0

Inserimento di un array in qualsiasi posizione di un vettore:

std::vector<int> v(4); // contains: 0, 0, 0, 0
int a [] = {1, 2, 3}; // contains: 1, 2, 3
v.insert(v.begin()+1, a, a+sizeof(a)/sizeof(a[0])); // contains: 0, 1, 2, 3, 0, 0, 0

Utilizzare reserve() prima di inserire più elementi se la dimensione vettoriale risultante è nota in anticipo per evitare riallocazioni multiple (vedere dimensioni e capacità del vettore ):

std::vector<int> v;
v.reserve(100);
for(int i = 0; i < 100; ++i)
    v.emplace_back(i);

Assicurati di non commettere l'errore di chiamare resize() in questo caso, altrimenti creerai inavvertitamente un vettore con 200 elementi in cui solo gli ultimi cento avranno il valore desiderato.