我有一个带有保留内存的空容器。我的函数(算法)不接受容器,只接收迭代器。如何在此函数中向元素添加元素?我需要分配内存并调用构造函数,但是如何调用由iterator引用的构造函数?
答案 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
是有问题的类型。