如何使用insert函数和迭代器更改向量内的元素?

时间:2015-11-18 17:14:28

标签: c++ c++11 vector insert iterator

我想使用insert函数和迭代器更改具有指定大小的向量的值。

当我开始调试时,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); 

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

1 个答案:

答案 0 :(得分:0)

我不太清楚为什么Visual Studio会给出这个令人困惑的消息。但是,这里的实际问题是insert会使迭代器失效 - 因此在插入任何内容后都无法使用它。正确的做法是:

#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";
}