到处都有声明,所有顺序容器的共同属性是元素可以顺序访问。但是我们知道std::array
,std::vector
和std::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/