我有一个保留内存的空容器。我的函数(算法)不需要容器,只有迭代器才能开始。如何在这个函数中添加元素到容器中?我需要分配内存并调用构造函数,但是如何在迭代器引用的位置调用构造函数?如何将元素添加到只有迭代器的容器?
回答
通常使用类似于std::inserter_iterator
的东西。但是,这通常不会消除对容器的指针或引用的需求 - 它只是将该引用存储在迭代器本身内部。
如果你有一个预置的迭代器类型,这没有好处。如果你像普通的算法那样只需要使用一些使用迭代器接口插入到集合中的东西,它就可以很好地工作。
std :: inserter_iterator必须带一个容器。但它不是由算法采取的 – user1290126 2012-04-01 19:00:57
当您创建迭代器时,将容器提供给'inserter_iterator',这是在函数被调用之前。之后,你只需要迭代器。 – 2012-04-01 19:16:52
所以,我只在insert_iterator的容器中添加了一个元素。然后出现一个错误。 insert_iterator应该指向哪里,开始还是结束?我应该增加它吗? – user1290126 2012-04-01 19:33:49
如果没有引用/指向该容器的指针,则不能将元素插入到容器中。
但是,您可以覆盖一个元素(假设您没有const_iterator
)。例如:
*it = T(params);
其中T
是有问题的类型。
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));
}
我不能使用容器!我只有迭代器。 – user1290126 2012-04-01 18:59:48
@ user1290126:看起来更好。 'std :: copy'不知道关于'my_vector'的任何信息,它只是传递一个迭代器,但它仍然会复制到向量中,随着它的发展而扩展它。这是“输出迭代器”的魔力。这里'std :: back_insert(my_vector)'创建一个迭代器,当它被写入时附加到vector上。 – 2012-04-01 19:02:28
@ user1290126你有什么样的迭代器?一个insert_iterator能够插入数据,因为它知道容器,但是如果你得到的只是一个普通的forward_iterator,那么你所问的问题更类似于“我如何仅使用指向一个指针的数组来调整数组元素“ - 答案只是”你不能“ - 通常,函数的调用者负责决定使用哪种类型的迭代器,以及该迭代器是否能够修改容器。 – 2012-04-01 19:04:29
你不能改变容器,仅具有横动迭代;不过,您可以改用插入迭代器。
编辑: 如果你保留内存,你必须知道它将包含多少元素。然后,您可以在传入函数之前添加空元素,并使用迭代器填充它们,并将其递增。之后,你可以返回这个迭代器,它将指向有用数据结束的位置。
不是个好主意,因为我知道可能的最大数量的元素,并且如果容器是关联的,那么这样的空元素可能不会发生在末尾 – user1290126 2012-04-01 19:19:21
- 1. 将迭代器返回到STL容器中的元素
- 2. 将迭代器添加到集合中
- 3. 迭代添加元素到列表
- 4. 如果类只存在于父容器中,则将类添加到子元素
- 5. 使用迭代器将std :: vector添加到自己的元素中
- 6. 如何将元素添加为html容器中的列堆栈?
- 7. EXT JS - 在添加到容器的任何元素上添加侦听器
- 8. 将元素追加到div容器内只在parentcontainer中
- 9. 将循环中的元素添加到容器中(lifetime)
- 10. 如何将Foo *迭代器添加到Foo矢量中?
- 11. 将元素添加到Java LinkedList的末尾,同时迭代它
- 12. 如何在新的迭代器中产生迭代器中的元素?
- 13. 如何将Redis添加到Docker容器?
- 14. 将元素添加到非包装容器,在左侧溢出
- 15. 将元素添加到水平布局而不适合容器
- 16. C++ STL关联容器:从元素获取迭代器?
- 17. 使用迭代器擦除容器元素
- 18. 将元素添加到数组,同时迭代它
- 19. Javascript - 将HTML追加到没有innerHTML的容器元素
- 20. C++容器的迭代器
- 21. 传递迭代器只迭代满足特定条件的元素
- 22. 如何添加类到元素只有它已经没有它?
- 23. 迭代器和STL容器
- 24. 如何创建容器持有策略类型的容器迭代器?
- 25. 有没有办法将元素添加到容器,同时不断借用早期元素?
- 26. 如何获取父容器的所有后代元素?
- 27. 如何将迭代器添加到Java 1.4中的自定义类的示例?
- 28. 如何将元素添加到DOM
- 29. 如何将元素添加到头DOM?
- 30. 如何将元素添加到ArrayList
请解释你为什么只有一个迭代器。大多数迭代器不会让你改变容器;你必须有权访问容器。顺便说一句,迭代器和常量迭代器之间的区别在于是否可以更改元素,而不是容器。 – 2012-04-01 19:19:19
另外,**请标记正确的答案您的问题。** – 2012-04-01 19:19:59
这是一个要求 – user1290126 2012-04-01 19:27:15