【问题标题】:How to change elements inside a vector using insert function and iterators?如何使用插入函数和迭代器更改向量内的元素?
【发布时间】:2016-02-20 13:17:07
【问题描述】:

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

当我开始调试时,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,1,1,1,1,1,1,1,1,1,1} 的向量转换为{2,1,2,1,2,1,2,1,2,1 或类似的吗?

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


【解决方案1】:

我不太清楚为什么 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";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2017-05-18
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多