Quindi stavo cercando di aggiungere numeri interi sul retro del mio vettore e ho pensato erroneamente che push_back()
aggiungessero i nuovi dati alla parte anteriore del vettore (ovvero vettore [0]). Ho fatto un test in Xcode e testato push_back()
contro emplace_back()
e ho ottenuto gli stessi risultati. Pensavo fossero diversi, ma questo mi fa pensare che forse fanno la stessa cosa. Se è così, perché il vettore ha i diversi metodi?Do vector.emplace_back() e vector.push_back() fanno la stessa cosa?
Ecco il mio codice nel caso in cui stavo facendo:
#include <vector>
#include <iostream>
using namespace std ;
int main(int argc, const char * argv[])
{
// for push_back
vector<int> push;
push.push_back(1);
push.push_back(2);
push.push_back(3);
push.push_back(4);
push.push_back(5);
push.push_back(6);
//display push_back
for (int i = 0; i < push.size(); i++) {
cout << "push[" << i << "]: " << push[i] << endl;
}
// distance between the two funcitons
cout << endl << endl;
vector<int> emplace;
emplace.emplace_back(1);
emplace.emplace_back(2);
emplace.emplace_back(3);
emplace.emplace_back(4);
emplace.emplace_back(5);
emplace.emplace_back(6);
//display emplace_back
for (int i = 0; i < emplace.size(); i++) {
cout << "emplace[" << i << "]: " << emplace[i] << endl;
}
return 0;
}
Il ritorno è stato:
push[0]: 1
push[1]: 2
push[2]: 3
push[3]: 4
push[4]: 5
push[5]: 6
emplace[0]: 1
emplace[1]: 2
emplace[2]: 3
emplace[3]: 4
emplace[4]: 5
emplace[5]: 6
So che questa è una domanda super facile, ma voglio solo per assicurarsi che io non sono fare qualcosa di stupidamente sbagliato e fraintendere le abilità della classe vettoriale.
@nawaz Questo duplicato non è molto buono, si tratta di una non conformità dello studio visivo e in realtà non risponde a questa domanda. –
'push_back' usa costruttori copia/sposta, costrutti' emplace_back' in posizione.Credo che 'emplace_back' sia un superset di' push_back', dal momento che è possibile utilizzare i costruttori copia/sposta con la costruzione sul posto. – Suedocode
@Aggieboy: Sì, lo è. E se fosse stato progettato oggi, probabilmente avremmo solo 'emplace_back'. – Deduplicator