我正在调查std::set
的代码。我看到insert
签名为_Pairib insert(const value_type& _Val)
。为什么通过引用传递输入参数?我知道standardcContainers将它们的元素复制到容器的内存中。有人知道这是如何实现的吗?分配者进入图片的位置在哪里?任何解释如何存储/插入元素的小代码/伪代码都将被赞赏。我有兴趣了解如何完成复制。STL容器插入元素
0
A
回答
2
分配器是一个模板参数。看看定义here:
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
如果不指定自己的分配器,将采取默认的分配器(这很可能只是一个new
)。
您可以在具有公共副本构造函数,析构函数和赋值运算符的类上使用STL包含器。见here:插入STL容器
元素可以是 供给公共拷贝构造,公共析构函数,和一个公共 赋值运算符的任何对象类型。析构函数不能抛出异常。 此外,关联容器(如集合和地图)必须定义一个 公共比较运算符,默认为运算符<。 容器上的某些操作可能还需要公共默认构造函数和公共等价运算符。
所以基本上这个复制是通过使用你在类中实现的上述公共成员函数完成的。
2
为什么输入参数作为参考被传递。
如果按值取值,则需要两个副本:一个用于函数参数,另一个用于容器节点。
分配器来自哪里。
容器请求分配器分配和初始化通常包含元素类型的私有节点类型以及其他信息,如指向其他节点的指针。
我有兴趣了解副本是如何完成的。
私有节点类型将保存传递给insert
的参数的副本。
相关问题
- 1. STL容器插入元素和内存透视
- 2. 回到STL容器元素的参考
- 3. STL容器元素销毁顺序
- 4. 使用元素键迭代STL容器
- 5. stl容器中的搜索元素
- 6. 向STL容器背面添加元素
- 7. STL容器移动选定的元素
- 8. 插入C++ map STL容器失败
- 9. 插入容器底部的元素
- 10. 将元素滑入容器
- 11. 将迭代器返回到STL容器中的元素
- 12. C++ STL关联容器:从元素获取迭代器?
- 13. 使用std :: remove_reference获取STL容器的元素迭代器
- 14. 插入内容到一个HTML元素
- 15. C++ STL Set:无法找到()插入的最后一个元素
- 16. 插入到STL地图的结构元素
- 17. 如何在STL向量矩阵中插入一个元素?
- 18. 地道STL:遍历列表并插入元素
- 19. 插入元素
- 20. C++ STL容器
- 21. 复制SDL_Surface像素为STL容器
- 22. STL:容器的容器
- 23. 移动STL容器中的元素是否将其从该容器中移除?
- 24. STL关联容器:清除并获取(不可复制)元素
- 25. Eclipse CDT无法解析STL容器中元素的方法
- 26. 检查stl容器中元素的类型 - C++
- 27. stl容器中的常量移除元素
- 28. C++ - 如何从STL容器有效的条件删除元素?
- 29. 什么是STL容器来执行元素之间的移除?
- 30. 列表插入STL
那么STL调用用户定义类型的拷贝构造函数,并创建对象到分配器创建的区域中? – Avinash
@Avinash - 是的。 – littleadv
谢谢,你知道我如何在C++中做到这一点,我的意思是我需要使用新的位置来实现这一点。 – Avinash