Ho una variabile std::vector<T>
. Ho anche due variabili di tipo T, la prima delle quali rappresenta il valore nel vettore dopo il quale devo inserire, mentre il secondo rappresenta il valore da inserire.Inserire più valori nel vettore
Quindi, consente di dire che ho questo contenitore: 1,2,1,1,2,2
E i due valori sono 2 e 3 rispetto alle loro definizioni di cui sopra. Poi vorrei scrivere una funzione che aggiornerà il contenitore per contenere invece:
1,2,3,1,1,2,3,2,3
Sto usando C++ 98 e spinta. Quali funzioni std o boost potrei usare per implementare questa funzione?
L'iterazione sul vettore e l'utilizzo di std :: insert è unidirezionale, ma diventa disordinato quando ci si rende conto che è necessario ricordare di saltare il valore appena inserito.
Siete a conoscenza dei problemi di efficienza di un tale algoritmo con uno std :: vector? Ogni volta che inserisci un valore, il resto del vettore viene copiato. Poiché la lista std :: potrebbe non essere una buona soluzione, posso pensare ad un algoritmo sul posto che sposta l'elemento solo una volta. Ma non so se esiste in Boost. –
Non ho parlato di riallocare il vettore. Non ci sono spazi extra tra gli elementi, una delle caratteristiche principali del vettore è avere dati contigui. Naturalmente se inserisci sempre alla fine, il problema non si verifica. Bene, vedi la mia risposta per un algoritmo che funziona sul posto. –
@PierreT .: Scusa, non ho capito cosa stavi ottenendo. Sì, vuoi farlo come la risposta di BenjaminLindley: metti i dati in un nuovo vettore in modo da aggiungere sempre dati alla fine, quindi reinserisci il contenuto nel vettore originale. –