2017-06-05 37 views
-1

我需要在每個偶數元素之後插入-20,但我的代碼不能正確工作, 我做錯了什麼?插入矢量後每個偶數值具體數字

srand(time(NULL)); 
vector <int> v; 

for (int i = 0; i < 15; i++) 
{ 
    v.push_back(rand()%100); 
    cout << v[i] << endl; 
} 


cout << "Vector after inserting new value: \n\n"; 
for (int i = 0; i < v.size(); i++) 
{ 
    if (v[i]%2==0) 
    { 
     v.insert(v.begin()+i, -20); 

    } 
    cout << v[i] << endl; 
    i = i + 1; 
} 
+2

預期結果?實際結果? –

+0

也許std :: vector不是該作業的最佳容器。 – DeiDei

回答

1
vector <int> v; 

v.reserve(15); 
for (int i = 0; i < 15; i++) 
{ 
    v.push_back(rand() % 100); 
    cout << v[i] << endl; 
} 


cout << "Vector after inserting new value: \n\n"; 
for (int i = 0; i < v.size(); i++) 
{ 
    if (v[i] % 2 == 0) 
    { 
     v.insert(v.begin() + i + 1, -20); // We insert at the next position 
     i++; // We make additional increment only if insertion took place 
    } 
} 

for (int i = 0; i < v.size(); i++) 
{ 
    cout << v[i] << endl; 
} 

輸出(帶有空格這一翻譯的換行符)

41 67 34 0 69 24 78 58 62 64 5 45 81 27 61 

Vector after inserting new value: 

41 67 34 -20 0 -20 69 24 -20 78 -20 58 -20 62 -20 64 -20 5 45 81 27 61 
+0

我們是否應該將其與OP的代碼區分開來,或者是否可以添加一兩個單詞來解釋如何解決問題? – mrt

+0

@mrt對不起,我沒那麼快:/ – Yola

3

使用i++i = i + 1不會很好地結束。

顯然,如果插入元素,則只需增加i兩次。

如果你只想位置i插入一個元素,那麼你就需要使用

v.insert(v.begin() + 1 + i, ...)