一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...主要是 研究 节点 与 节点 之间关系的 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 容器中每个元素的位置都是固定的 , 元素的位置取决于插入元素的 时间 和 位置 , 与元素值无关 ; 向量 Vector , 双端队列 Deque , 列表 List 是序列式容器 ; 如下图所示..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入
---- stack 基本概念 栈(stack):一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。在进行数据插入和删除的一端称为栈顶,另一端称为栈底。...生活中栈的例子: 常用接口 功能描述: 栈容器常用的对外接口 构造函数: stack stk; //stack采用模板类实现, stack对象的默认构造形式 stack(const...在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 常用接口 功能描述: 栈容器常用的对外接口
参考: [C++] STL 容器 (一) - 基本介紹 [C++] STL 容器 (二) - Iterator 部分示例:
除了需要指定元素的类型和个数之外,和常规数组没有太大的差别。显然,不能增加或删除元素。...rend() 可以分别得到指向最一个元素和第一个元素前一个位置的反向迭代器。...//函数 crbegin() 和 crend() 可以返回 const 反向迭代器。...primes.size() << std::endl; std::cout << "The capacity is" << primes.capacity() << std::endl; //输出语句输出的容器大小和容董都为...然而,如果用 push_back() 函数添加一个元素, //然后再输出容器的大小和容量,这时大小变为 16,容量变为 30。
set 容器内部元素的组织方式和 map 相同,都是平衡二叉树 初始化 std::set numbers {8, 7, 6, 5, 4, 3, 2, 1}; 默认的比较函数是...less,因此容器中的元素会升序排列。...emplace() 和 emplace_hint() 总是成功。它们都指向创建的新元素。 find() 会返回和参数匹配的第一个元素的迭代器,如果都不匹配,则返回容器的结束迭代器。...lower_bound() 返回和参数匹配的第一个元素的迭代器,如果没有匹配的元素,会返回容器的结束迭代器。返回的迭代器和 range() 返回的 pair 的第一个成员相同。...upper_bound() 返回的迭代器和 equal_range() 返回的 pair 的第二个成员相同。 count() 返回和参数匹配的元素的个数。
STL对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。...顺序性容器:vector、deque、list 关联性容器:set、multiset、map、multimap 容器适配器:stack、queue 图片 这里主要学习顺序容器和容器适配器 向量容器 图片...=lst.end();i++) cout << *i << " "; cout << endl; return 1; } 栈容器 图片 //【例13.8】的程序:栈容器的使用 #include..."; q.pop(); } cout << endl; return 1; } 废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:STL...标准库容器
deque deque以双端队列的形式组织元素,可以在容器的头部和尾部高效地添加或删除对象,这是它相对于 vector 容器的优势。...用另一个序列的开始和结束迭代器所指定的一段元素,来构造 list 容器的初始化: std::list samples {++cbegin(values), --cend(values...一元断言接受一个和元素同类型的参数或引用,返回一个布尔值。断言返回 true 的所有元素都会被移除。...forward_list forward_list 容器以单链表的形式存储元素。 drward_list 和 list 最主要的区别是:它不能反向遍历元素;只能从头到尾遍历。...这时 your_words 就只剩下两个字符串元素:"seven"和"four”。
一、构造函数 set st; set(const set &st); 二、赋值 set& operator(const set &st); 三、大小和交换 size(); empty(); swap...(); 四、插入和删除 insert(ele); clear(); erase(pos); erase(beg,end); erase(ele); 五、查找和统计 find(key);//查找key是否存在...1.对内置数据类型进行排序 #include using namespace std; #include //set容器排序 class MyCompare { public...2.对自己定义的数据类型进行排序 #include using namespace std; #include #include //set容器排序,存放自定义数据类型
C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序。本文将介绍STL中的一些常用容器和算法。...此外,map还提供了m.empty()和m.size()分别判断容器是否为空和获取容器大小。 算法 除了容器,STL还提供了一些常用的算法,可以方便地操作容器中的元素。...除了find,STL还提供了很多其他的查找算法,比如find_if可以根据指定规则查找元素,binary_search可以判断容器中是否含有指定元素,lower_bound和upper_bound可以查找元素的下界和上界...结论 本文介绍了C++ STL中的一些常用容器和算法,它们可以大大提高开发效率,开发者应该熟练掌握它们的使用。除了本文介绍的容器和算法,STL还提供了很多其他的容器和算法,可以根据具体的需求选择使用。...在使用STL时,要注意容器和算法的复杂度,避免出现性能问题。
对STL常见容器,vector,map等的内存管理进行分析,以及内存管理方法,和操作系统内存管理进行了简要的讲解。...对STL常见容器,vector,map等的内存管理进行分析,以及内存管理方法,和操作系统内存管理进行了简要的讲解。...rBAoL1-Q20mAN44lAAO6uDAqdEA653.png STL容器内存管理.ppt
栈:先进后出。 一、构造函数 stack<T> stk; stack<const stack& stk>; 二、赋值操作 stack& operator=(co...
队列:先进先出。 一、构造函数 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)...test(); system("pause"); return 0; } 三、大小操作 empty(); size(); resize(ele); resize(num,ele); 四、插入和删除
multimap 中会出现具有相同键的元素序列,它们会被添加到容器中。 3.1插入元素 multimap 容器的成员函数 insert() 可以插入一个或多个元素,而且插入总是成功。...如果使用 multimap 容器,几乎可以肯定它会包含键重复的元素;否则,就应该使用 map。 一般来说,我们想访问给定键对应的所有元素。 equal_range() 。...,或是不同类型的但可以和键比较的对象。...如果键不存在,pair 的成员变量 first 就是容器的结束迭代器. lower_bound() 会返回一个迭代器,它指向键值和参数相等或大于参数的第一个元素,或者指向结束迭代器。...所以,当存在一个或多个相等键时,这些函数会返回一个开始迭代器和一个结束迭代器,它们指定了和参数匹配的元素的范围,这和 equal_range() 返回的迭代器是相同的。
key快速的找到value; 一、构造函数 map mp; map(const map &mp); 二、赋值 map& operator=(const map &mp); 三、map大小和交换...size(); empty(); swap(st); 四、插入和删除 insert(ele); clear(); erase(pos); erase(beg,end); erase(key); #include... using namespace std; #include //map容器 插入和删除 void printMap(map&m) { for...m.clear(); printMap(m); } int main() { test01(); system("pause"); return 0; } 五、查找和统计...bool operator()(int v1,int v2) const { //降序 return v1 > v2; } }; //map容器
deque和vector的区别: vector对于头部的插入和删除效率低,数据量越大,效率越低; deque相对于而言,对头部的插入和删除比vector快; vector访问元素时速度比deque快,这和两者的内部实现有关...deque容器的迭代器是支持随机访问的。...test(); system("pause"); return 0; } 三、deque大小操作(与vector也基本一致,但是deque中没有容量capaticy限制) 四、deque插入和删除
本质;string是c++风格的字符串,而string本质上是一个类 string和char*的区别: char*是一个指针; string是一个类,类内部封装了char*,管理这个字符串,是一个char...*的容器; 特点: string内部封装了很多内部成员方法,例如find、copy、delete、replace、insert等。...string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行操作。...< "str3=" << str3 << endl; } int main() { test(); system("pause"); return 0; } 三、字符串的查找和替换..."hello"; str1.insert(1, "big");//在某个位置插入 cout << str1 << endl; str1.erase(1, 3);//删除起始位置和最终位置之间的
vector和普通数组的区别:数组是静态空间,而vector可以动态扩展。 所谓动态扩展:并不是在原空间后接新空间,而是找到更大的内存空间,然后将原数据拷贝至,然后释放原空间。...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
小结 我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset,它们究竟有何区别,各自的优缺点是什么,为了更好的扬长避短,提高程序性能,在使用之前需要我们了解清楚...map map类似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得...multimap multimap类似于数据库中的1:N关系,它是一种关联容器,提供一对多的数据处理能力。...---- 小结 在实际使用过程中,到底选择这几种容器中的哪一个,应该根据遵循以下原则: 1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector; 2、如果需要大量的插入和删除元素...,不关心随机存取的效率,使用list; 3、如果需要随机存取,并且关心两端数据的插入和删除效率,使用deque; 4、如果打算存储数据字典,并且要求方便地根据key找到value,一对一的情况使用
vector快 vector访问元素时的速度会比deque快,这和两者内部实现有关 deque内部工作原理: deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据 中控器维护的是每个缓冲区的地址...d4 = d3; printDeque(d4); } int main() { test01(); system("pause"); return 0; } 总结:deque容器和...功能描述: 向deque容器中插入和删除数据 函数原型: 两端插入操作: push_back(elem); //在容器尾部添加一个数据 push_front(elem);...,[ ]和at也可以 front返回容器第一个元素 back返回容器最后一个元素 deque 排序 功能描述: 利用算法实现对deque容器进行排序 算法: sort(iterator beg, iterator...end) //对beg和end区间内元素进行排序 示例: #include #include void printDeque(const deque<int
领取专属 10元无门槛券
手把手带您无忧上云