是vector <list <int>&gt;并列出<vector <int>&gt;同样当我们宣布这些时,他们如何留在记忆中?

时间:2017-10-07 06:16:03

标签: c++ stl

我看过一个视频教程,他们使用vector<list<int> >来实现BFS算法。但我根本不明白这一点,我很困惑地区分vector<list<int> >list<vector<int> >。我试图绘制一个原理图记忆表示,以了解它们如何保留在内存中,但不能。

2 个答案:

答案 0 :(得分:0)

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

例如,如果您知道项目的索引,则很容易在向量中找到某些内容,但没有像列表中的索引一样。当您在列表中搜索时,您会从一个项目跳到另一个项目,直到找到您要查找的项目。在列表中,该项只知道它是左右邻居。

这并不像我描述的那么简单,列表也有它的优点。例如,将项添加到列表总是只为一个项分配内存,但如果vector在其内存限制上,则需要为整个新向量分配内存,并在那里复制所有旧向量数据。但是当vector没有达到它的限制时,你不必分配任何内存,并且操作速度非常快。所有内存分配都会减慢进程。

总结如下:每个数据结构都有它的优点和缺点,它实际上取决于你需要它。

答案 1 :(得分:0)

  

我试图绘制原理图记忆表示

你不必。

您的代码应关注每个数据结构提供的方法。

  

vector<list<int>>list<vector<int>>是否相同?

没有

最重要的区别是向量的元素位于连续的内存块中,而列表不需要遵循这个原则。