一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 序列式容器的位置是固定的 ; 关联式容器 : Associated Containers , 元素的位置与插入顺序无关 , 容器中有一个特定排序标准 , 默认是哈希值 ; 集合 Set...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入...; 多重集合 的元素在容器中根据指定的比较函数按键值排序 , 因此它是有序的 ; 多重集合 的元素不需要具有唯一键 , 一个键值可具有多个相关联的元素值 ; 需导入 头文件 ; 映射
List和SList都是C++ STL中的容器,都是基于双向链表实现的,可以存储可重复元素的特点。...).List的缺点是无法通过位置来直接访问序列中的元素,也就是说,不能动态跨段索引元素.为了访问 list 内部的一个元素,必须一个一个地遍历元素,通常从第一个元素或最后一个元素开始遍历。...}4.7 类链表正反向排序这段C++代码定义了一个Person类,展示了如何对list容器的元素进行排序。...接下来,代码实现了一个MyCompare函数,作为list容器的排序规则。...C++代码展示了list容器的一些基本操作,包括添加元素、删除元素、使用迭代器遍历链表以及运算符重载等。
List和SList都是C++ STL中的容器,都是基于双向链表实现的,可以存储可重复元素的特点。...List的缺点是无法通过位置来直接访问序列中的元素,也就是说,不能动态跨段索引元素.为了访问 list 内部的一个元素,必须一个一个地遍历元素,通常从第一个元素或最后一个元素开始遍历。...0; } 4.7 类链表正反向排序 这段C++代码定义了一个Person类,展示了如何对list容器的元素进行排序。...接下来,代码实现了一个MyCompare函数,作为list容器的排序规则。...这段C++代码展示了list容器的一些基本操作,包括添加元素、删除元素、使用迭代器遍历链表以及运算符重载等。
排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。...1 STL提供的Sort 算法 ---- C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。...而且使用的是stable_partition, 元素之间的相对次序是没有变. 2 Sort 和容器 ---- STL中标准容器主要vector, list, deque, string, set,...因此在这些容器中,元素一直是有序的。 这些容器的迭代器类型并不是随机型迭代器,因此,上述的那些排序函数,对于这些容器是不可用的。...记得,以前翻译过Effective STL的文章,其中对如何选择排序函数总结的很好: 若需对vector, string, deque, 或 array容器进行全排序,你可选择sort或stable_sort
参考: [C++] STL 容器 (一) - 基本介紹 [C++] STL 容器 (二) - Iterator 部分示例:
- vector 动态数组默认构造函数 一、vector 动态数组 1、vector 动态数组简介 C++ 语言 的 标准模板库 ( STL , Standard Template Library )...中 的 vector 容器 是一种 " 动态数组 " , 该容器 的 大小 可以在运行时 动态 增长 或 缩小 ; 2、vector 动态数组容器功能简介 vector 动态数组 容器 提供了一系列的...增 / 删 / 查 / 改 / 排序 等功能 ; 动态改变大小 : vector 动态数组 可以在运行时 动态 改变大小 ; 使用 push_back() 函数 动态 添加元素 ; 使用 pop_back...容器对象 , 并使用该 动态数组 容器 ; vector 动态数组 容器 是使用 模板类 实现的 , vector 对象 的 默认构造形式 如下 : vector vecT; 上述默认构造形式...类型元素的 vector 动态数组容器 vector vecFloat; 存放 类对象 的 vector 容器 : vector 动态数组容器中 也可以装 类对象 元素 ;
小结 我们常用到的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、如果需要大量的插入和删除元素
一、STL 容器的 值 ( Value ) 语意 1、STL 容器存储任意类型元素原理 C++ 语言中的 STL 容器 , 可以存储任何类型的元素 , 是因为 STL 容器 使用了 C++ 模板技术进行实现...; 2、STL 容器元素可拷贝原理 STL 容器 定义时 , 所有的 STL 容器 的相关操作 , 如 插入 / 删除 / 排序 / 修改 , 都是 基于 值 Value 语意 的 , 不是 基于 引用...容器元素类型需要满足的要求 STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的..., 这是容器操作的基础 ; 提供 重载 = 操作符函数 : STL 容器的元素可以被赋值 ; 4、STL 容器迭代器遍历 除了 queue 队列容器 与 stack 堆栈容器 之外 , 每个 STL...容器的元素类 1、代码示例 STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的
需求;有一个类,类中有姓名和年龄成员变量,现在要按姓名升序排序,在姓名相同时按名字升序排序。...lst.push_back(p3); lst.push_back(p4); lst.push_back(p5); lst.push_back(p6); cout 排序前...:" << endl; printPerson(lst); lst.sort(myCompare); cout 排序后:" << endl; printPerson...可以发现年龄已按升序排列,同时在年龄相同时,名字也是按首字母的顺序按升序排列。
执行结果 一、std::map 容器 1、std::map 容器简介 std::map 容器 是 C++ 语言 标准模板库 ( STL , Standard Template Library ) 提供的...的一个 " 关联容器 " ; std::map 关联容器 , 提供 一对一数据处理能力 , 容器中的元素自动按键 Key 排序 , 键 Key 和 值 Value 是 一一对应 的 ; 第一个 键 Key...键 Key 对 元素 进行自动排序 的 ; 每个键的值在 std::map 容器中都是 唯一的 , 键值不允许重复 ; 在 std::map 容器 中 , 可以 根据 键 Key 快速检索 容器中的...对应 值 Value ; std::map 容器 的 大小 是 动态调整的 , 在 运行时 增加 / 删除 键值对元素 , 其大小也随之变化 ; 使用 map 集合之前 , 需要导入 头文件...; #include "map" 2、std::map 容器排序规则 std::map 容器 中 , 排序规则如下 : 默认排序规则 : 默认的排序规则是 less 仿函数规则 , 即按照 键 的升序进行排列
STL对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。...//【例13.5】的程序:向量容器的使用 #include #include #include using namespace std...=dq.end();iter++) cout << *iter << " "; cout << endl; } 链表容器 图片 //【例13.7】的程序:链表容器的使用 #include <iostream...=lst.end();i++) cout << *i << " "; cout << endl; return 1; } 栈容器 图片 //【例13.8】的程序:栈容器的使用 #include...图片 //【例13.9】的程序:队列容器的使用 #include #include using namespace std; int main() { queue
对STL常见容器,vector,map等的内存管理进行分析,以及内存管理方法,和操作系统内存管理进行了简要的讲解。...对STL常见容器,vector,map等的内存管理进行分析,以及内存管理方法,和操作系统内存管理进行了简要的讲解。...rBAoL1-Q20mAN44lAAO6uDAqdEA653.png STL容器内存管理.ppt
队列:先进先出。 一、构造函数 queue<T> que; queue(const queue &que); 二、赋值操作 queue& operator=(c...
物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的。 STL中的链表是一个双向循环链表。...,返回新数据的位置 insert(pos,n,ele)//向指定的索引位置插入n个元素,无返回值 insert(pos,beg,end)//在pos位置插入区间为[beg,end]之间的元素,无返回值...front(); back(); 六、反转后排序 #include #include #include using namespace std;...,是不支持sort排序 //sort(lst1.begin(), lst1.end());不合法 //内部会提供相应的算法 lst1.sort();//默认从大至小 printList...(lst1); //要想降序排序,自己定义规则 lst1.sort(myCompare); printList(lst1); } int main() { test();
1.所有元素在插入时就会被自动排序。 2.底层是二叉树的实现。 3.set中不允许有重复的元素,multiset里面允许有重复的元素。...,若不存在,则返回set.end(); count(key);//统计key的个数 六、对set进行排序 set默认排序是从小到大,可以利用仿函数,改变排序规则。...1.对内置数据类型进行排序 #include using namespace std; #include //set容器排序 class MyCompare { public...需要注意的是vs2019重载operator()需要加const,不然会报错。...2.对自己定义的数据类型进行排序 #include using namespace std; #include #include //set容器排序,存放自定义数据类型
栈:先进后出。 一、构造函数 stack<T> stk; stack<const stack& stk>; 二、赋值操作 stack& operator=(co...
---- stack 基本概念 栈(stack):一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。在进行数据插入和删除的一端称为栈顶,另一端称为栈底。...栈中的元素都遵循后进先出的原则(LIFO,Last In First Out)。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。...生活中栈的例子: 常用接口 功能描述: 栈容器常用的对外接口 构造函数: stack stk; //stack采用模板类实现, stack对象的默认构造形式 stack(const...,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 常用接口 功能描述: 栈容器常用的对外接口 构造函数...: queue que; //queue采用模板类实现,queue对象的默认构造形式 queue(const queue &que); //拷贝构造函数 赋值操作
参考 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作 | vector 容器容量判定 | vector 容器重新指定容器大小 | 容器尾部插入/删除元素..."vector" // 打印 vector 类型的 STL 容器 void printV(vector& v) { cout 容器中的元素 : ";...STL 容器 void printV(vector& v) { cout 容器中的元素 : "; for (int i = 0; i < v.size()...二、 vector 插入元素 1、vector 容器尾部 插入 元素 - push_back 函数 参考 【C++】STL 容器 - vector 动态数组容器 ④ ( vector 容器容量大小操作...vector 类型的 STL 容器 void printV(vector& v) { cout 容器中的元素 : "; for (int i =
vector和普通数组的区别:数组是静态空间,而vector可以动态扩展。 所谓动态扩展:并不是在原空间后接新空间,而是找到更大的内存空间,然后将原数据拷贝至,然后释放原空间。...end()); printVector(v3); vector v4; v4.assign(4, 3); printVector(v4); } 三、vector容器的容量和大小...erase(start,end)//删除start到end之间的元素 clear()//清空容器 void test() { vector v1; v1 = { 1, 2,...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内部封装了很多内部成员方法,例如find、copy、delete、replace、insert等。...string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行操作。...一、string构造函数 string():创建一个空的字符串 string(const char* s):使用字符串s初始化 string(const string& str):使用一个string对象初始化另一个...cout 的索引位置,未找到返回-1 cout << str1.rfind("bc",6)