好的,请给出参考对象的STL容器的内容,我会尽力给出完善且全面的答案。
一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...vector 的内存空间是连续的 , 列表 List 的内存空间是不连续的 ; 容器中的元素节点关系 : 顺序排列 , 单向链表 , 双向链表 , 树形关系 ; 容器中的元素是否允许重复 : 集合 Set...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入
参考: [C++] STL 容器 (一) - 基本介紹 [C++] STL 容器 (二) - Iterator 部分示例:
是通过 迭代器 进行关联的 ; 所有的 C++ 程序都会使用到 STL 标准模板库 , 使用 STL 提供的容器更加快速地开发程序代码 ; STL 标准模板库 的 头文件 中 内置了 各种常用的 存储数据的模板类..." using namespace std; // 使用 STL 容器中的 vector 向量容器需要导入的头文件 #include "vector" // 使用 STL 算法需要导入的头文件 #...三、代码示例 - STL 容器存放自定义类对象 代码示例 : #include "iostream" using namespace std; // 使用 STL 容器中的 vector 向量容器需要导入的头文件...四、代码示例 - STL 容器存放对象指针 代码示例 : #include "iostream" using namespace std; // 使用 STL 容器中的 vector 向量容器需要导入的头文件...容器 // 声明 vector 向量容器 vector v; // 向容器中添加元素, 相当于将 指针地址值 拷贝到容器中 // 指针地址值 就是 三个对象的内存首地址
小结 我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset,它们究竟有何区别,各自的优缺点是什么,为了更好的扬长避短,提高程序性能,在使用之前需要我们了解清楚...此外,当被插入的内存空间不够时,需要重新申请一块足够大的内存并进行内存拷贝。值得注意的是,vector每次扩容为原来的两倍,对小对象来说执行效率高,但如果遇到大对象,执行效率就低了。...map map类似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得...multimap multimap类似于数据库中的1:N关系,它是一种关联容器,提供一对多的数据处理能力。...---- 小结 在实际使用过程中,到底选择这几种容器中的哪一个,应该根据遵循以下原则: 1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector; 2、如果需要大量的插入和删除元素
一、STL 容器的 值 ( Value ) 语意 1、STL 容器存储任意类型元素原理 C++ 语言中的 STL 容器 , 可以存储任何类型的元素 , 是因为 STL 容器 使用了 C++ 模板技术进行实现..., 假如 在外部 该 指针 / 引用 指向的对象被回收 , 那么容器操作就会出现问题 ; STL 容器 中 , 存储的元素 , 必须是可拷贝的 , 也就是 元素类 必须提供 拷贝构造函数 ; 3、STL...容器元素类型需要满足的要求 STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的..., 这是容器操作的基础 ; 提供 重载 = 操作符函数 : STL 容器的元素可以被赋值 ; 4、STL 容器迭代器遍历 除了 queue 队列容器 与 stack 堆栈容器 之外 , 每个 STL...容器的元素类 1、代码示例 STL 容器元素类型需要满足的要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器的元素是可拷贝的
容器网络与 Kubernetes 网络一直很“神秘”,也是很多人容器技术上升曲线的瓶颈,但它也是我们深入走进云原生世界绕不过的话题。...要彻底地搞清楚容器网络与 Kubernetes 网络,需要了解很多底层的网络概念,如 OSI 七层模型、Linux 网络栈、虚拟网络设备以及 iptables 等。...这里引用一些优秀的参考,不定期更新:Linux 数据包的接收与发送过程Linux 虚拟网络设备从 container 到 pod容器网络(一)容器网络(二)浅聊 Kubernetes 网络模型使用 Go
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
2.底层是二叉树的实现。 3.set中不允许有重复的元素,multiset里面允许有重复的元素。...1.对内置数据类型进行排序 #include using namespace std; #include //set容器排序 class MyCompare { public...需要注意的是vs2019重载operator()需要加const,不然会报错。...2.对自己定义的数据类型进行排序 #include using namespace std; #include #include //set容器排序,存放自定义数据类型...; } }; void test01() { //自定义数据类型 都会指定排序规则 sets; //创建Person对象
栈:先进后出。 一、构造函数 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); //拷贝构造函数 赋值操作
队列:先进先出。 一、构造函数 queue<T> que; queue(const queue &que); 二、赋值操作 queue& operator=(c...
物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的。 STL中的链表是一个双向循环链表。...一、构造函数 list lst; list(bag,end); list(n,elem); list(const list &list); 二、list的赋值和交换 assign(beg,end)...,返回新数据的位置 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(); //所有不支持随机访问的迭代器的容量
1.map中所有的元素都是pair; 2.pair元素中第一个元素为key,第二个元素为value; 3.所有元素都会根据键值自动排序; 4.map中不允许有重复的键,multimap中允许有重复的键;...优点:可以根据key快速的找到value; 一、构造函数 map mp; map(const map &mp); 二、赋值 map& operator=(const map &mp);...erase(pos); erase(beg,end); erase(key); #include using namespace std; #include //map容器...cout << "未找到元素" << endl; } //统计 //map不允许插入重复key 元素 ,count统计而言 结果要么是0 要么是1 //multimap的count...bool operator()(int v1,int v2) const { //降序 return v1 > v2; } }; //map容器
deque和vector的区别: vector对于头部的插入和删除效率低,数据量越大,效率越低; deque相对于而言,对头部的插入和删除比vector快; vector访问元素时速度比deque快,这和两者的内部实现有关...; deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据。...中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间。 deque容器的迭代器是支持随机访问的。...insert(pos,n,ele); insert(pos,beg,end); clear(); erase(beg,end); erase(pos); 五、deque数据存取(与vector一致,多了取头部的操作...at(0); 修改第一个元素: d1[0] = 2; d1.at(0) = 2; 访问首元素: d1.front(); 访问尾元素: d1.back(); 六、deque排序(利用algorithm中的sort
本质;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对象初始化另一个...string对象 string(int n,char c):使用n个字符c初始化 #include #include using namespace std;
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互换容器...<< endl; //减少容量 //vector(v1)为匿名对象,用v1的容量和大小初始化化该匿名对象,然后将该对象的大小和容量 //重新交换给v1 vector...七、vector预留空间 减少vector在动态扩展容量时的扩展次数 函数原型:reverse(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问 #include<iostream
deque容器 deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度回比...,使得使用deque时像一片连续的内存空间 deque容器的迭代器也是支持随机访问的 deque构造函数 功能描述: deque容器构造 函数原型: deque deqT;...//如果容器变短,则末尾超出容器长度的元素被删除。...//如果容器变短,则末尾超出容器长度的元素被删除。...clear(); //清空容器的所有数据 erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置
3.5 stack容器 3.5.1 stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,...因此栈不允许有遍历行为 栈中进入数据称为 — 入栈 push 栈中弹出数据称为 — 出栈 pop 生活中的栈: 子弹弹夹,拥挤的地铁 3.5.2 stack 常用接口 功能描述:栈容器常用的对外接口...构造函数: stack stk; //stack采用模板类实现, stack对象的默认构造形式 stack(const stack...示例: #include //栈容器常用接口 void test01() { //创建栈容器 栈容器必须符合先进后出 stack s; //向栈中添加元素,叫做 压栈...s.empty()) { //输出栈顶元素 cout << "栈顶元素为: " << s.top() << endl; //弹出栈顶元素 s.pop(); } cout << "栈的大小为
序列式容器才可以在容器初始化的时候制定大小,关联式容器不行; 3.注意,关联容器的迭代器不支持it+n操作,仅支持it++操作。...2) 当删除元素时,不会释放限制的空间,所以向量容器的容量(capacity)大于向量容器的大小(size); (3) 对于删除或插入操作,执行效率不高,越靠后插入或删除执行效率越高; (4) 高效的随机访问的容器...2.创建vecotr对象: (1) vector v1; (2) vector v2(10); 3.基本操作: v.capacity(); //容器容量 v.size...; merge()函数的功能是:将两个容器合并,合并成功后会按从小到大的顺序排列; 比如:lt1.merge(lt2); lt1容器中的元素全都合并到容器lt2中。...创建pair对象: pair p1; //调用构造函数来创建pair对象 make_pair(1,1.2); //调用make_pair()函数来创建pair对象
领取专属 10元无门槛券
手把手带您无忧上云