当设置值小于当前容器空间时,会将目前容器中超出设置值的空间释放掉;当设置值大于当前容器空间时,会在当前空间的基础上增加容量。 举个例子,vector当前容量为10,若使用resize(20)设置容量为20,则需要再扩容增加10个;若使用resize(5)设置容量为5,则将6-10的空间进行释放。 空口无凭,咱直接上g++5.2源码: void r...
Vector优点:可使用下标随机访问,尾插尾删效率高。 缺点:前面部分的插入删除效率低,扩容有消耗,可能存在一定的空间浪费。 底层是由一块连续的内存空间组成,由三个指针实现的分别是头指针(表示目前使用空间的头),尾指针(表示目前使用空间的尾)和可用空间尾指针实现 List优点:按需申请内存,不需要扩容,不会造成内存空间...
扩容 当我们插入数据,若空间不够,将要扩容操作:使用realloc函数。 //扩容void SLCheckCapacity(SL* ps){if (ps->size == ps->capacity) //如果当前长度等于容量,需要扩容{//如果原容量为0,则新容量为4 //否则新容量为原容量的2倍int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SL...
第二,调用ensureExplicitCapacity(minCapacity)方法来确定集合为了确保添加元素成功是否需要对现有的元素数组进行扩容。首先将结构性修改计数器加一;然后判断minCapacity与当前元素数组的长度的大小,如果minCapacity比当前元素数组的长度的大小大的时候需要扩容,进入第三阶段。 第三,如果需要对现有的元素数组进行扩容,则调用gro...
STL 方法含义索引STL 容器容器底层数据结构时间复杂度有无序可不可重复其他 array 数组 随机读改 O(1) 无序 可重复 支持随机访问 vector 数组 随机读改、尾部插入、尾部删除 O(1)头部插入、头部删除 O(n) 无序 可重复 支持随机访问 deque 双端队列 头尾插入、头尾删除 O(1) 无序 可重复 一个中央控制器...
面向过程通常采用自上而下的方法;而面向对象通常采用自下而上的方法。程序扩展性角度。面向对象编程更容易修改程序,更容易添加新功能。【十五】C/C++中常用容器功能汇总vector(数组)vector是封装动态数组的顺序容器。成员函数:at():所需元素值的引用。front():访问第一个元素(返回引用)。back():访问最后一个元素(...
频繁调用push_back()会使得程序花费很多时间在vector扩容上,会变得很慢。这种情况可以考虑使用list。(21)C++中vector和list的区别 vector和数组类似,拥有一段连续的内存空间。vector申请的是一段连续的内存,当插入新的元素内存不够时,通常以2倍重新申请更大的一块内存,将原来的元素拷贝过去,释放旧空间。因为内存空间...
使用智能指针:智能指针是一种自动化管理内存的机制,它通过类似于引用计数的方式来确保在没有任何对象引用该内存块时能够自动释放对应的内存空间。C++标准库提供了shared_ptr和unique_ptr两个类模板来支持智能指针。 使用容器:C++标准库提供了各种容器类型(如vector、list、map等),这些容器会自动管理其中元素所占用的空...
// 在向量中插入一个新元素void vector_insert(vector_t *vector, void *data, size_t index) { if (index > vector->size) { // 处理越界情况 return; } if (vector->size == vector->capacity) { // 扩容 vector->capacity *= 2; vector->data = realloc(vector->data, vector->capacity * ...
STL 方法含义索引STL 容器容器底层数据结构时间复杂度有无序可不可重复其他 array 数组 随机读改 O(1) 无序 可重复 支持随机访问 vector 数组 随机读改、尾部插入、尾部删除 O(1)头部插入、头部删除 O(n) 无序 可重复 支持随机访问 deque 双端队列 头尾插入、头尾删除 O(1) 无序 可重复 一个中央控制器...