2011-07-17 12 views
37

chcę wstawić element do określonego położenia wektora, można po prostu użyć zadanie:wstawić element do określonego położenia wektora

// vec1 and 2 have the same length & filled in somehow 
vec1; 
vec2; 

vec1[i] = vec2[i] // insert vec2[i] at position i of vec1 

czy muszę użyć insert():

vector<sometype>::iterator iterator = vec1.begin(); 

vec1.insert(iterator+(i+1), vec2[i]); 
+12

Uważaj na swoje frazowanie tutaj. "Wstaw" będzie oznaczało dodanie elementu w miejscu i przesunięcie wszystkich kolejnych elementów w górę o jedno miejsce w wektorze (tj. Powiększenie wektora o jeden element). Z drugiej strony możesz użyć 'setting', aby wskazać, że chcesz zmienić istniejący element wektorowy na nową wartość. –

+0

Myślę, że to, czego chcę, to zastąpić cokolwiek przy vec1 [i] z vec2 [i]; aw moim przypadku vec [i] może być zerowe, a ja chcę zachować długość vec1 i 2 to samo; – daiyue

Odpowiedz

70
vec1[i] = vec2[i] 

będzie ustawić wartość vec1[i] do wartości vec2[i]. Nic nie jest wstawiane. Twoje drugie podejście jest prawie poprawne. Zamiast +i+1 trzeba tylko +i

v1.insert(v1.begin()+i, v2[i]) 
+1

Złożoność czasowa O (n) prawda? – ArmaGeddON

+1

@ArmaGeddON: W przypadku wstawienia, tak –

0

Zobacz przykład tutaj: http://www.cplusplus.com/reference/stl/vector/insert/ np .:



... 
vector::iterator iterator1; 

    iterator1= vec1.begin(); 
    vec1.insert (iterator1+i , vec2[i]); 

// This means that at position "i" from the beginning it will insert the value from vec2 from position i 

Twoje pierwsze podejście było zastąpienie wartości z vec1 [i] z wartościami z vec2 [i ]

10

Możesz to zrobić, używając at. Można wypróbować poniższy prosty przykład:

const size_t N = 20; 
std::vector<int> vec(N); 
try { 
    vec.at(N - 1) = 7; 
} catch (std::out_of_range ex) { 
    std::cout << ex.what() << std::endl; 
} 
assert(vec.at(N - 1) == 7); 

Zauważmy, że metoda at zwraca allocator_type::reference, który jest to, że sprawa jest int&. Używanie at jest równoznaczne z przypisywaniem wartości takich jak vec[i]=....


Jest różnica między at i insert jak można zrozumieć z poniższym przykładzie:

const size_t N = 8; 
std::vector<int> vec(N); 
for (size_t i = 0; i<5; i++){ 
    vec[i] = i + 1; 
} 

vec.insert(vec.begin()+2, 10); 

Jeśli teraz wydrukować vec otrzymamy:

1 2 10 3 4 5 0 0 0 

Jeśli zamiast tego zrobiliśmy vec.at(2) = 10 lub vec[2]=10, otrzymalibyśmy

1 2 10 4 5 0 0 0 
Powiązane problemy