跳至主要內容
list的实现

list的实现

C++标准库中的list是一个双向链表,可以支持在任意位置插入和删除元素,并且具有快速的插入和删除效率。

与vector的区别

与vector相比,list的主要区别在于:

  1. 存储结构:vector采用连续的内存空间存储元素,而list采用链式结构存储元素。

  2. 随机访问:vector支持随机访问,可以通过下标访问元素;而list不支持随机访问,只能通过迭代器遍历元素。

  3. 插入和删除:vector在末尾插入和删除元素的效率很高,但在中间插入和删除元素时效率较低,因为需要移动其他元素;而list在任意位置插入和删除元素的效率都很高,因为只需要修改相邻节点的指针。

  4. 内存分配:vector在内存空间不足时会自动扩容,会重新分配一块更大的内存空间,并将原有元素复制到新的内存空间中;而list的内存分配是动态的,每次插入一个元素都会分配一块新的内存空间。


ekskei大约 3 分钟C/C++STL
vector的实现

vector的实现

原理

C++标准库中的vector是一个动态数组,具有自动扩容的功能。它的实现原理可以分为以下几个方面:

  1. 内存分配:vector使用new运算符来分配内存,同时在析构函数中使用delete[]运算符来释放内存。vector在内存空间不足时会自动扩容,扩容时会重新分配一块更大的内存空间,并将原有元素复制到新的内存空间中。

  2. 元素访问:vector支持随机访问,可以通过下标访问元素。vector内部使用一个指针来指向第一个元素的内存地址,通过指针加上下标的偏移量来访问指定元素的内存地址。

  3. 元素插入和删除:vector支持在末尾添加元素和删除末尾元素。在插入元素时,如果vector的内存空间不足,vector会自动扩容,并将新元素插入到末尾;在删除元素时,vector会调用元素的析构函数来销毁元素,并将size减1。

  4. 迭代器:vector支持迭代器,可以使用迭代器来遍历vector中的元素。vector的迭代器类型是指向元素的指针。

  5. 内存分配策略:为了提高vector的性能,C++标准库中的vector通常采用了一些内存分配策略,例如预分配内存空间、空间复用、指针交换等。这些策略可以减少内存分配和复制的次数,提高vector的效率。


ekskei大约 3 分钟C/C++STL