2015-11-18 38 views
1

我想使用插入函數和迭代器更改指定大小的向量的值。如何使用插入函數和迭代器更改矢量內的元素?

當我開始調試,Visual Studio中顯示此消息:

Vector iterator not incrementable 

我已閱讀,這是在載體上使用insert的結果的一部分。

vector<int> myvector(10,1); 
vector<int>::iterator it; 

for (it = myvector.begin(); it != myvector.end(); it++) 

    myvector.insert(it, 2); 

有沒有其他方法可以追求最初的目的?

+0

在迭代迭代時插入矢量並不合理。該插入將使迭代器失效。 –

+4

除了說「這是我試圖做的,它沒有工作」之外,請描述你在非工作代碼之外的其他工作。用英文描述非工作代碼也不(非常有用)。描述你正在嘗試做什麼,*不*只是你如何去做。我的猜測:你是否想要將包含「{1,1,1,1,1,1,1,1,1,1,1}」的向量轉換爲「{2,1,2,1,2, 1,2,1,2,1'還是其他? – Yakk

回答

0

我不太確定爲什麼Visual Studio會給出這個令人困惑的消息。然而,這裏的實際問題是插入無效迭代器 - 所以在插入任何東西后你不能使用它。正確的做法如下:

#include <vector> 
#include <iostream> 

int main() { 
    std::vector<int> vec(10, 1); 

    std::vector<int>::iterator it = vec.begin(); 
    for (; it != vec.end();) { 
     it = vec.insert(it, 2); 
     it += 2; 
    } 

    for (it = vec.begin(); it != vec.end(); ++it) 
     std::cout << "!: " << *it << "\n"; 
}