如何将元素添加到只有迭代器的容器中?

时间:2012-04-01 18:51:15

标签: c++ stl iterator

我有一个带有保留内存的空容器。我的函数(算法)不接受容器,只接收迭代器。如何在此函数中向元素添加元素?我需要分配内存并调用构造函数,但是如何调用由iterator引用的构造函数?

4 个答案:

答案 0 :(得分:4)

通常使用std::inserter_iterator之类的东西。但是,这通常不会消除对容器的指针或引用的要求 - 它只是将该引用存储在迭代器本身内。

如果你有一个预先设置的迭代器类型,这没有用。如果你有类似普通算法的东西,只需要使用一些使用迭代器接口插入到集合中的东西,它就可以很好地工作。

答案 1 :(得分:3)

C ++有insert_iterator的概念,我假设你正在追求它?

例如:

#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    int my_array[] = { 1,2,3,4,5,6,7,8,9,10 };
    std::vector<int> my_vector;

    std::copy( std::begin( my_array ),
               std::end( my_array ),
               std::back_inserter( my_vector ) );
}

答案 2 :(得分:3)

你不能改变容器,只能遍历迭代器;但是,您可以使用insert iterator。

编辑: 如果保留记忆,则必须知道它将包含多少元素。然后你可以在传入函数之前添加空元素,并使用迭代器填充它们,然后递增它们。之后,您可以返回此迭代器,它将指向有用数据结束的位置。

答案 3 :(得分:2)

如果没有指向该容器的引用/指针,则无法将元素插入容器中。

但是,您可以覆盖一个元素(假设您没有const_iterator)。类似的东西:

*it = T(params);

其中T是有问题的类型。