【问题标题】:C++ - Insertion into Vector - after or before iterator?C++ - 插入向量 - 在迭代器之后还是之前?
【发布时间】:2014-05-27 02:46:55
【问题描述】:

上下文是:未知大小的数据集不断迭代,但在初始化后插入最少(初始化速度不是问题)。

混淆是插入向量后的元素位置:

如果我们在vector为空时在vector.begin()处插入,它会在地址.begin()处创建一个元素。

如果我们在vector非空时在vector.begin()处插入,它会将.begin()处的现有元素向前移动一位,还是将新元素放在.begin()之后?

类似地,如果在插入新元素之前迭代一个向量并匹配向量元素中的特定条件,如果我们插入如下: vector.insert(iterator, new_element)

它是在当前迭代元素之后还是之前插入元素? 提前致谢。 M

【问题讨论】:

    标签: c++ vector stl iterator


    【解决方案1】:

    引用std::vector::insert()上的cppreference:

    在 [iterator] 指向的位置之前插入值。

    我们需要一个单一的语法来插入每个可能的位置(开始、结束、这两者之间的某个位置):

    std::vector<int> v;                                     // {         }
    v.insert(std::begin(v), 2);                             // { 2       }
    v.insert(std::find(std::begin(v), std::end(v), 2), 1);  // { 1, 2    }
    v.insert(std::end(v), 3);                               // { 1, 2, 3 }
    

    容器的end指针是一个点之后最后一个元素,我们不能插入超过那个点,所以我们插入之前。

    同样当容器为空时,std::begin(container) == std::end(container)true,所以insert(std::begin(container), value) 将起作用。

    【讨论】:

    • 感谢朋友 - 我应该更仔细地阅读 cpp 文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2016-06-05
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多