一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 序列式容器的位置是固定的 ; 关联式容器 : Associated Containers , 元素的位置与插入顺序无关 , 容器中有一个特定排序标准 , 默认是哈希值 ; 集合 Set..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入
参考: [C++] STL 容器 (一) - 基本介紹 [C++] STL 容器 (二) - Iterator 部分示例:
STL对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。...顺序性容器:vector、deque、list 关联性容器:set、multiset、map、multimap 容器适配器:stack、queue 图片 这里主要学习顺序容器和容器适配器 向量容器 图片...; int main() { vector v(3); //定义初始长度为3的整数容器 v[0]=5; //下标0处放置元素5 v[1]=2;...//下标1处放置元素2 v.push_back(7); //在尾部插入元素7 vector::iterator first=v.begin(); //让first指向开头元素..."; q.pop(); } cout << endl; return 1; } 废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:STL
对STL常见容器,vector,map等的内存管理进行分析,以及内存管理方法,和操作系统内存管理进行了简要的讲解。...对STL常见容器,vector,map等的内存管理进行分析,以及内存管理方法,和操作系统内存管理进行了简要的讲解。...rBAoL1-Q20mAN44lAAO6uDAqdEA653.png STL容器内存管理.ppt
1.对内置数据类型进行排序 #include using namespace std; #include //set容器排序 class MyCompare { public...2.对自己定义的数据类型进行排序 #include using namespace std; #include #include //set容器排序,存放自定义数据类型
STL中的链表是一个双向循环链表。...push_front(ele)//头部插入元素 pop_front()//头部删除元素 //注意pos、start、end参数是一个迭代器 insert(pos,ele)//向指定的索引位置插入元素,返回新数据的位置
队列:先进先出。 一、构造函数 queue<T> que; queue(const queue &que); 二、赋值操作 queue& operator=(c...
栈:先进后出。 一、构造函数 stack<T> stk; stack<const stack& stk>; 二、赋值操作 stack& operator=(co...
生活中栈的例子: 常用接口 功能描述: 栈容器常用的对外接口 构造函数: stack stk; //stack采用模板类实现, stack对象的默认构造形式 stack(const...在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 常用接口 功能描述: 栈容器常用的对外接口
erase(pos); erase(beg,end); erase(key); #include using namespace std; #include //map容器...bool operator()(int v1,int v2) const { //降序 return v1 > v2; } }; //map容器
所谓动态扩展:并不是在原空间后接新空间,而是找到更大的内存空间,然后将原数据拷贝至,然后释放原空间。...end()); printVector(v3); vector v4; v4.assign(4, 3); printVector(v4); } 三、vector容器的容量和大小...insert(pos,n,ele)//向指定的索引位置插入n个元素 erase(pos)//删除指定索引的元素 erase(start,end)//删除start到end之间的元素 clear()//清空容器...at(0) = 6; cout << v1.front() << endl;//第一个元素 cout << v1.back() << endl;//最后一个元素 } 六、vector互换容器...七、vector预留空间 减少vector在动态扩展容量时的扩展次数 函数原型:reverse(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问 #include<iostream
string是c++风格的字符串,而string本质上是一个类 string和char*的区别: char*是一个指针; string是一个类,类内部封装了char*,管理这个字符串,是一个char*的容器...string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行操作。
deque容器的迭代器是支持随机访问的。
一、STL 容器的 值 ( Value ) 语意 1、STL 容器存储任意类型元素原理 C++ 语言中的 STL 容器 , 可以存储任何类型的元素 , 是因为 STL 容器 使用了 C++ 模板技术进行实现...STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的 , 这是容器操作的基础...; 提供 重载 = 操作符函数 : STL 容器的元素可以被赋值 ; 4、STL 容器迭代器遍历 除了 queue 队列容器 与 stack 堆栈容器 之外 , 每个 STL 容器都可以使用 迭代器 进行遍历...; // 年龄也设置为默认值 m_age = 0; } // 重新分配新的 字符串 内存 m_name = new char[strlen(obj.m_name) + 1];...; // 年龄也设置为默认值 m_age = 0; } // 重新分配新的 字符串 内存 m_name = new char[strlen(obj.m_name) + 1];
小结 我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset,它们究竟有何区别,各自的优缺点是什么,为了更好的扬长避短,提高程序性能,在使用之前需要我们了解清楚...map map类似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得...multimap multimap类似于数据库中的1:N关系,它是一种关联容器,提供一对多的数据处理能力。...---- 小结 在实际使用过程中,到底选择这几种容器中的哪一个,应该根据遵循以下原则: 1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector; 2、如果需要大量的插入和删除元素
Part 01 提出问题:30 分钟掌握 STL 本文 分为三部分 • STL有那些容器,各自使用场景 • STL容器底层结构和时间复杂度 • STL关键特性和部分源码分析 1....STL有那些容器,各自使用场景 • 请简述STL中顺序容器、关联容器、无序关联容器和容器适配器各有哪几种? • 在以下场景中,你会选择哪种STL容器?请阐述理由。 2....STL关键特性和具体实现 • stl 容器 迭代器,算法之间关系? • 偏特化和萃取机制 模版关系? • 移动语义 和模版 萃取有什么关系?.../ \ / \ 2 3 7 6 现在调用 pop_heap(v.begin(), v.end()): 第一步:交换堆顶和末尾 把根节点9和最后一个节点6交换位置: 6 ← 新的根节点...来存储数据,并利用 make_heap、push_heap、pop_heap这一系列泛型算法来在底层容器上维护堆结构,从而提供优先级队列的接口和行为 STL 第一个特性 技术 容器 和算法 集合 make_heap
deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。 ...//如果容器变短,则末尾超出容器长度的元素被删除。...deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。 ...//如果容器变短,则末尾超出容器长度的元素被删除。...//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
vector容器 vector基本概念 功能: vector数据结构和数组非常相似,也称为单端数组 vector与普通数组区别: 不同之处在于数组是静态空间,而vector可以动态扩展 动态扩展: 并不是在原空间之后续接新空间...,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间 vector容器的迭代器是支持随机访问的迭代器 vector构造函数 功能描述: 创建vector容器 函数原型: vector v;...(); //返回容器中元素的个数 resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置...resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。 ...v1.capacity() << endl; cout << "v1的大小 = " << v1.size() << endl; } //resize 重新指定大小 ,若指定的更大,默认用0填充新位置
string容器 string基本概念 本质: string是C++风格的字符串,而string本质上是一个类 string和char * 区别: char * 是一个指针 string是一个类,类内部封装了...char*,管理这个字符串,是一个char*型的容器。...特点: string 类内部封装了很多成员方法 例如:查找find,拷贝copy,删除delete 替换replace,插入insert string管理char*所分配的内存,不用担心复制越界和取值越界等
https://blog.csdn.net/haluoluo211/article/details/80877141 SGI STL中的容器set,以RB-Tree作为其底层的实现(rb_tree...在set容器键值key和实值value是相同的,且在容器里面的元素是根据元素的键值自动排序的,同时我们不能修改set容器里面的元素值,所以set的迭代器是采用RB-Tree的const_iterator