C++ deque 与 vector 和 C++ map 与 Set

标签 c++ stl

谁能告诉我 vector 和 deque 之间有什么区别。我知道 vector 在 C++ 中的实现,但不知道双端队列。 map 和 set 的接口(interface)也与我相似。两者之间有什么区别以及何时使用一个。

最佳答案

std::vector :一个动态数组类。内部内存分配确保它总是创建一个数组。当数据的大小已知并且已知不会经常更改时很有用。当您想随机访问元素时,它也很好。
<强> std::deque :双端队列,既可以充当栈也可以充当队列。当您不确定元素的数量以及访问数据元素总是以串行方式时非常有用。它们在前端和末端添加/删除元素时速度很快,但在中间添加/删除元素时则不然。
<强> std::list :可用于创建数据“列表”的双链表。列表的优点是可以从列表的任何部分插入或删除元素,而不会影响指向列表成员的迭代器(并且在删除后仍然是列表的成员)。当您知道元素将经常从列表的任何部分删除时很有用。
<强> std::map :将“键”映射到“值”的字典。对于索引不是整数的“数组”等应用程序很有用。基本上可用于创建名称到元素的映射列表,例如存储名称到小部件关系的映射。
<强> std::set :“唯一”数据值的列表。例如如果插入 1、2、2、1、3,列表将只有元素 1、2、3。请注意,此列表中的元素始终是有序的。在内部,它们通常实现为二叉搜索树(如 map )。

关于C++ deque 与 vector 和 C++ map 与 Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704273/

相关文章:

c++ - 如何获得可调用类型的签名?

c++ - 当一个线程向 boost::asio::io_service 添加计时器而另一个线程同时运行 io_service::run 时,它是否线程安全?

c++ - 预声明类型定义的 boost::variant

C++ 控制全局对象的析构函数顺序

C++:是否可以从重载 << 运算符的对象中获取 std::string?

c++ - 如何修复 'invalid operands to binary expression' ?

c++ - 使用临时对象调用构造函数

c++ - 使用自定义模型从 QTreeView 中删除行

c++ - 比较将整数值转换为字符串的 3 种现代 C++ 方法

c++ - 如何在最多进行 3N 次比较时实现 std::make_heap ?