Dire che ho un vettore con valori [1,2,3,4,5,6,7,8,9,10]. Voglio creare un nuovo vettore che faccia riferimento, ad esempio, [5,6,7,8]. Immagino che si tratta solo di creare un vettore con dei puntatori o devo premere a pressione tutti i valori intermedi di cui ho bisogno?Creazione di un nuovo subvettore C++?
16
A
risposta
36
Uno dei costruttore std::vector
s' accetta un intervallo:
std::vector<int> v;
// Populate v.
for (int i = 1; i <= 10; i++) v.push_back(i);
// Construct v1 from subrange in v.
std::vector<int> v1(v.begin() + 4, v.end() - 2);
4
Non è necessario utilizzare push_back
se non si vuole, è possibile utilizzare std::copy
:
std::vector<int> subvector;
copy (v1.begin() + 4, v1.begin() + 8, std::back_inserter(subvector));
3
I farebbe quanto segue:
#include <vector>
#include <iostream>
using namespace std;
void printvec(vector<int>& v){
for(int i = 0;i < v.size();i++){
cout << v[i] << " ";
}
cout << endl;
}
int main(){
vector<int> v;
for(int i = 1;i <= 10;i++) v.push_back(i);
printvec(v);
vector<int> v2(v.begin()+4, v.end()-2);
printvec(v2);
return 0;
}
~
4
Questo è abbastanza facile da fare con std::valarray
invece di un vettore:
#include <valarray>
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
const std::valarray<int> arr={0,1,2,3,4,5,6,7,8,9,10};
const std::valarray<int>& slice = arr[std::slice(5, // start pos
4, // size
1 // stride
)];
}
che prende una "fetta" del valarray, più genericamente di un vettore.
Per un vettore si può fare con il costruttore che prende due iteratori però:
const std::vector<int> arr={0,1,2,3,4,5,6,7,8,9,10};
std::vector<int> slice(arr.begin()+5, arr.begin()+9);
Problemi correlati
- 1. Creazione di un nuovo corpus con NLTK
- 2. creazione di un nuovo file in eclissi
- 3. Creazione di un nuovo attributo con jQuery
- 4. Errore DataMapper SQLite durante la creazione di un nuovo database
- 5. Problemi nella creazione di un nuovo modello di dati Entity
- 6. Creazione di un nuovo set di icone in Android Studio?
- 7. creazione di un nuovo file di testo utilizzando heredoc
- 8. Beego: creazione di un nuovo orm prima di ogni richiesta?
- 9. C#: Creazione di un nuovo FileInfo in una directory che si ha la DirectoryInfo di
- 10. Creazione di un nuovo Spark DataFrame con un nuovo valore di colonna basato sulla colonna nel primo dataframe Java
- 11. Creazione di nuovo Microsoft.CodeAnalysis.CustomWorkspace - ottenuto ReflectionTypeLoadException
- 12. Creazione di un nuovo buffer con testo utilizzando EmacsClient
- 13. Creazione di un nuovo PDF unendo documenti PDF usando TCPDF
- 14. Creazione di un nuovo oggetto posizione in javascript
- 15. Creazione di un nuovo oggetto generico con jolly
- 16. Creazione di un nuovo documento PDF utilizzando l'API PDFBOX
- 17. Creazione di un nuovo oggetto in classe astratta in Java
- 18. Rails Creazione di un nuovo thread o processo in background
- 19. Creazione di un nuovo Data Ora da stringa
- 20. nodeenv si blocca quando la creazione di un nuovo ambiente
- 21. Creazione di un nuovo dizionario in una busta SOAP
- 22. Creazione di un nuovo thread con metodo con il parametro
- 23. Creazione di un nuovo utente MySQL in ambiente Amazon RDS
- 24. Creazione di un nuovo progetto guidata Eclipse JDT?
- 25. Creazione di un nuovo array dall'elenco chiavi in PHP
- 26. Graph - Creazione di un nuovo album fotografico per l'app facebook
- 27. Creazione di un nuovo database da un backup di un altro database sullo stesso server?
- 28. Creazione di un diagramma di classe C++
- 29. Ramo di riutilizzo Git o eliminazione e creazione di nuovo
- 30. Creazione di un percorso file in C#
Le date risposte finora sono tutte buone opzioni. Mentre tu * potresti * creare un vettore di puntatori al tuo sub-intervallo, probabilmente non lo vorrai. Se il vettore originale cresce fino al punto in cui deve riassegnare la sua memoria interna, i tuoi indicatori diventerebbero tutti non validi. Soprattutto quando si tratta di gamme così piccole, è preferibile lavorare con una copia. –
Definisci "si riferisce a". Cosa dovrebbe succedere se il vettore originale cambia? –
Possibile duplicato di [Il modo migliore per estrarre un subvettore da un vettore?] (Http://stackoverflow.com/questions/421573/best-way-to-extract-a-subvector-from-a-vector) – TobiMcNamobi