首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

处理stl容器的大小

对于STL容器(包括vector、list、deque、set、multiset、map、multimap、unordered_set、unordered_map等)的大小处理,有如下几个方面需要关注:

  1. 容器的内存分配

STL容器在内存中是以连续空间分配的方式实现的。当容器需要扩大时,它会在内存中分配一块更大的连续空间,并将元素复制到新容器的内存中。

  1. 容器的扩容

当容器中的元素数量超过容器的容量时,就需要对容器进行扩容。扩容过程就是将容器中的元素复制到新的更大的容器中,并释放旧容器的内存。

  1. 容器的内存分配策略

STL中的容器都是基于指针的,因此容器的内存分配策略也是基于指针的。在STL中,容器的内存分配策略有3种:

  • 在堆上分配内存:当容器在内存中分配一块更大的连续空间时,就会使用堆上分配内存的方式。这种方式会在内存堆中申请一块大小固定的内存,并在其周围预留一些空间,以便于后续的扩容操作。
  • 在栈上分配内存:当容器的容量不足以分配一块更大的连续空间时,就会使用栈上分配内存的方式。这种方式会在栈中申请一块大小固定的内存,并在其周围预留一些空间,以便于后续的扩容操作。
  • 在静态数组上分配内存:当容器的容量不足以分配一块更大的连续空间时,就会使用静态数组上分配内存的方式。这种方式会在静态数组中申请一块大小固定的内存,并在其周围预留一些空间,以便于后续的扩容操作。
  1. 容器的内存释放

当容器中的元素被删除或容器被销毁时,就会进行容器的内存释放。内存释放就是将容器中的元素释放掉,并将其占用的内存返回给操作系统。

以上就是STL容器的大小处理机制,它能够保证容器的内存分配和释放都是高效的,并且能够支持大规模容器的内存管理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】STL 标准模板库 ③ ( STL 容器简介 | STL 容器区别 | STL 容器分类 | 常用的 STL 容器 )

一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...vector 的内存空间是连续的 , 列表 List 的内存空间是不连续的 ; 容器中的元素节点关系 : 顺序排列 , 单向链表 , 双向链表 , 树形关系 ; 容器中的元素是否允许重复 : 集合 Set...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入

92330
  • 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作 | vector 容器容量判定 | vector 容器重新指定容器大小 | 容器尾部插入删除元素 )

    文章目录 一、 vector 容器容量大小操作 1、vector 容器容量判定 2、vector 容器重新指定容器大小 3、代码示例 二、 vector 容器尾部插入 / 删除元素 1、vector 容器尾部插入元素...2、vector 容器尾部删除元素 一、 vector 容器容量大小操作 1、vector 容器容量判定 vector 容器容量判定 : 获取元素个数 : size() 函数返回 vector 容器中元素的数量...重新指定长度 : 参数 n 表示新的容器大小 ; 如果 n 大于当前容器的大小 , 则会在容器的末尾添加元素 , 使用元素类型的默认构造函数创建新元素 ; 如果 n 小于当前容器的大小 , 则会在容器的开头删除元素...vec = {1, 2, 3}; // 将 vector 的大小增加到 5 vec.resize(5); 重新指定长度并进行填充 : 参数 n 表示新的容器大小 ; 如果 n 大于当前容器的大小..., 则会在容器的末尾添加元素指定元素 val 参数 ; 如果 n 小于当前容器的大小 , 则会在容器的开头删除元素 ; // 重新指定容器大小 并进行填充 void resize(size_type

    90410

    STL里的容器区别

    小结 我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset,它们究竟有何区别,各自的优缺点是什么,为了更好的扬长避短,提高程序性能,在使用之前需要我们了解清楚...---- verctor vector类似于C语言中的数组,它维护一段连续的内存空间,具有固定的起始地址,因而能非常方便地进行随机存取,即 [] 操作符,但因为它的内存区域是连续的,所以在它中间插入或删除某个元素...map map类似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得...multimap multimap类似于数据库中的1:N关系,它是一种关联容器,提供一对多的数据处理能力。...---- 小结 在实际使用过程中,到底选择这几种容器中的哪一个,应该根据遵循以下原则: 1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector; 2、如果需要大量的插入和删除元素

    1K40

    【C++】STL 容器 - STL 容器的值语意 ( 容器存储任意类型元素原理 | STL 容器元素可拷贝原理 | STL 容器元素类型需要满足的要求 | 自定义可存放入 STL 容器的元素类 )

    一、STL 容器的 值 ( Value ) 语意 1、STL 容器存储任意类型元素原理 C++ 语言中的 STL 容器 , 可以存储任何类型的元素 , 是因为 STL 容器 使用了 C++ 模板技术进行实现...; 2、STL 容器元素可拷贝原理 STL 容器 定义时 , 所有的 STL 容器 的相关操作 , 如 插入 / 删除 / 排序 / 修改 , 都是 基于 值 Value 语意 的 , 不是 基于 引用...容器元素类型需要满足的要求 STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的..., 这是容器操作的基础 ; 提供 重载 = 操作符函数 : STL 容器的元素可以被赋值 ; 4、STL 容器迭代器遍历 除了 queue 队列容器 与 stack 堆栈容器 之外 , 每个 STL...容器的元素类 1、代码示例 STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的

    15010

    c++STL容器之list容器

    物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的。 STL中的链表是一个双向循环链表。...printList(lst1); printList(lst4); } int main() { test(); system("pause"); return 0; } 三、大小操作...,返回新数据的位置 insert(pos,n,ele)//向指定的索引位置插入n个元素,无返回值 insert(pos,beg,end)//在pos位置插入区间为[beg,end]之间的元素,无返回值...clear()//移除所有数据 erase(pos)//删除指定索引的元素 erase(start,end)//删除start到end之间的元素 remove(ele);//删除指定的元素 五、数据存取...push_back(2); lst1.push_back(1); lst1.push_back(3); //反转 lst1.reverse(); //所有不支持随机访问的迭代器的容量

    36010

    STL——stack容器和queue容器详解

    生活中栈的例子: 常用接口 功能描述: 栈容器常用的对外接口 构造函数: stack stk; //stack采用模板类实现, stack对象的默认构造形式 stack(const...重载等号操作符 数据存取: push(elem); //向栈顶添加元素 pop(); //从栈顶移除第一个元素 top(); //返回栈顶元素 大小操作...: empty(); //判断堆栈是否为空 size(); //返回栈的大小 stackst; //入栈 st.push(10); st.push...,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 常用接口 功能描述: 栈容器常用的对外接口 构造函数...: empty(); //判断堆栈是否为空 size(); //返回栈的大小 queueq; q.push(10); q.push(20); q.push

    12410

    c++STL容器之deque容器

    deque和vector的区别: vector对于头部的插入和删除效率低,数据量越大,效率越低; deque相对于而言,对头部的插入和删除比vector快; vector访问元素时速度比deque快,这和两者的内部实现有关...; deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据。...中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间。 deque容器的迭代器是支持随机访问的。...int> d4; d4.assign(4, 3); } int main() { test(); system("pause"); return 0; } 三、deque大小操作...at(0); 修改第一个元素: d1[0] = 2; d1.at(0) = 2; 访问首元素: d1.front(); 访问尾元素: d1.back(); 六、deque排序(利用algorithm中的sort

    39810
    领券