C ++中的双链接列表,链接列表和动态数组

时间:2017-07-26 06:49:41

标签: c++ list vector stl

我是C ++的新手,可能这些问题非常简单和基本[对不起!]。在这里,我有两个基本问题:

  1. 据我所知,C ++中的向量是动态数组。他们可以通过将前/后元素推入其中来改变大小。

    我的问题是:动态分配的矢量或“动态数组”名称是否因为大小变化能力而被调用? 动态分配的数组和动态数组使我完全 困惑!

  2. STL列表是C ++中的链接列表(同样,据我所知)。这些是双重链接列表还是单链表?
  3. 谢谢,

2 个答案:

答案 0 :(得分:0)

向量是动态分配的,正如您在上面提到的documentation中看到的那样。您可以在push_back函数中更好地看到这一点:

  

如果new size()大于capacity(),则所有迭代器和引用(包括last-the-end迭代器)都将失效。否则只有过去的迭代器无效。

此外,请牢记这一点,其复杂性是按常数摊销的(例如,您可以看到this)。

有关详情(在评论中提及),您可以找到真实列表forward_list

  

它是作为单链表实现的,与C中的实现相比基本上没有任何开销。与std :: list相比,当不需要双向迭代时,这个容器提供了更多的空间效率存储。

此外,正如documentation中所述,列表是作为双向链表实现的。

  

列表容器实现为双向链接列表;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置中。排序内部由关联到链接的每个元素与其前面的元素保持在内部,并且链接指向它后面的元素。

答案 1 :(得分:0)

  
      
  1. 是动态分配的矢量还是动态数组"由于尺寸能力的变化,刚刚调用了名称?
  2.   

据我所知,矢量被称为动态数组,因为它们的大小可以在运行时改变。但实际上,他们动态分配数组。

  
      
  1. STL列表是C ++中的链接列表(同样,据我所知)。这些是双重链接列表还是单链表?
  2.   

两者。 list是双重关联的,slist是单独关联的。当单个链接列表被引入标准库时,使用名称std::forward_list代替slist(与STL版本略有不同)。