2013-03-18 17 views

Odpowiedz

11

Istnieje konstruktor dla std::vector (numer 4 w this link), który zajmuje dwa iteratory. Konstruuje nowy wektor zawierający wszystkie elementy od pierwszego iteratora (włącznie) do drugiego iteratora (wyłącznego).

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

ta obejmuje mero[100] przez mero[249] w nowo powstałej wektora.

+0

Dzięki, że działa bez zarzutu! :-) – David

+0

Mylące to nie zawiera 250. Nazwa w definicji mówi "[pierwszy, ostatni]" jest mylące – PnotNP

5

std::vector ma konstruktora, że ​​trwa dwa iteratory, więc można określić zakres skopiować:

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) 

ta wybuduje v2 tak, że zawiera kopie wszystkich elementów z v1.begin()+100 do jednego przed v1.begin()+250.

5

Można uzyskać pierwszy iterator korzystając begin i advance go przez co ilość potrzebujesz:

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

+1 za użycie 'begin' /' advance' zamiast starego wektora 'zacząć' /' wektor :: operator + '. –

Powiązane problemy