我看过一个视频教程,他们在其中使用vector<list<int> >实现BFS算法。但是我一点都不了解,我对区分vector<list<int> >list<vector<int> >感到困惑。我试图绘制一个示意图的内存表示,以了解它们如何保留在内存中,但是没有。

最佳答案

它们有很大的不同,std::vector驻留在连续的内存块中,相反,std::list的每一项都可以位于内存中的任何位置。 要选择正确的结构,您需要知道要对数据执行哪种操作(读取/更改/添加)以及的频率。

例如,如果您知道项目的索引,则很容易在vector中找到某些内容,但是在列表中没有类似index的功能。在列表中搜索时,您会从一个项目跳到另一项目,直到找到所需的项目。在列表中,该项目仅知道它的左右邻居。

正如我所描述的那样,它不是那么简单,list也有它的优点。例如,将项目添加到列表始终总是只为一个项目分配内存,但是如果vector处于其内存限制,则需要为整个新vector分配内存,并在此复制所有旧的vector数据。但是,当 vector 没有限制时,您不必分配任何内存,并且操作非常快。所有内存分配都在减慢该过程。

因此,总而言之:每个数据结构都有其优缺点,这实际上取决于您需要什么。

关于c++ - vector <list <int>>和list <vector <int>>是否相同当我们声明它们时,它们如何保留在内存中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46617274/

10-11 22:24
查看更多