c++ - 序列容器-只能顺序访问元素

标签 c++ c++11

到处都有声明,所有顺序容器的共同属性是元素可以顺序访问。但是我们知道std::arraystd::vectorstd::deque都支持对元素的快速随机访问。 std::list支持双向迭代,而std::forward_list仅支持单向迭代。

那么,实际上“按顺序访问”在这里意味着什么?

最佳答案

顺序访问与随机访问或迭代器无关。

例如,std::set的迭代器是双向迭代器。您可以遍历std::set的元素,就像遍历std::vector的元素一样。

序列容器有一个正反面,并且所有元素都按照插入顺序在它们之间。将其与std::set进行对比,它在概念上确实具有正反面(最小值和最大值),但是存储其元素由比较功能定义的顺序。这也需要与std::unordered_set进行对比,后者实际上没有正面和背面,并按哈希函数确定的顺序存储其元素。最后,将它与std::stack进行对比,后者仅具有顶部(概念上是背面,而没有正面)。

唯一具有正面和背面并按其插入顺序存储其元素的其他标准容器是std::queue。但是,如果不访问和删除队列前面的所有元素,就无法访​​问队列中的任何任意元素。

因此,如果我必须给出一个序列容器的定义,那么它将是一个具有顺序访问权限的容器,这意味着可以按插入它们的顺序访问其任何元素,而无需对其进行迭代即可。结果,您可以对序列容器进行排序。

不要与连续(或随机)访问混淆。

也就是说,这不是一个非常有用的分类。更有用的类别是迭代器的类别和操作的复杂性。

关于c++ - 序列容器-只能顺序访问元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62212261/

相关文章:

c++ - 模板类中的类模板特化

c++ - 轻松检查共享库中未解析的符号?

C++ 程序停止响应

c++ - Eclipse:函数 'to_string' 无法解析

c++ - C++ 中的整数范围——当标准还不存在时我该怎么办?

c++ - 命名空间和类中的可变参数模板函数

c++ - 友元定义函数的命名空间是什么?

C++ - 在字符和文本之间获取文本字符串

c++ - 有什么区别?铿锵++ |铿锵 -std=c++11

c++ - 单击按钮时如何使 linedit 准备好输入