2013-03-18 18 views
6

angegebene Kopie erstellt I einen Vektor:C++ Vektorinhalt auf einen anderen Vektor

std::vector<std::string> mero; // earlier it filled with more than 500 data 

Danach würde Ich mag andere Vektor schaffen, das nur einen Teil des Vektors mero nimmt. (Beispiel: von 100. bis 250.)

Antwort

11

Es gibt einen Konstruktor für std::vector (Nummer 4 in this link), der zwei Iteratoren benötigt. Er konstruiert einen neuen Vektor, der alle Elemente vom ersten (einschließlich) Iterator bis zum zweiten (exklusiven) Iterator enthält.

std::vector<std::string> partOfMero(mero.begin() + 100, mero.begin() + 250); 

Dies wird mero[100] durch mero[249] in der neu konstruierte Vektor umfassen.

+0

Dank, das funktioniert gut! :-) – David

+0

Es ist verwirrend es enthält nicht 250. Der Name in der Definition sagt '[first, last]' ist verwirrend – PnotNP

5

std::vector hat einen Konstruktor, der zwei Iteratoren nimmt, so können Sie eine Reihe kopieren angeben:

std::vector<std::string> v1; 
std::vector<std::string>::const_iterator first = v1.begin() + 100; 
std::vector<std::string>::const_iterator last = v1.begin() + 250; 
std::vector<std::string> v2(first, last) 

Diese v2 so konstruieren wird, dass sie Kopien aller Elemente von v1.begin()+100 einem vor v1.begin()+250 enthält.

5

Sie den ersten Iterator begin mit bekommen können, und advance es um alles, was Betrag, den Sie brauchen:

vector<int> sub(advance(begin(miro), 100), 
       advance(begin(miro), 250)); 
+1

+1 für die Verwendung von 'beginnen' /' Advance' anstelle von alten 'vector :: begin' /' vector :: Operator + '. –

Verwandte Themen