stl容器篇学习汇总
包含各类容器的使用和注意事项
Binary Oracle
一名热爱开源和技术的Coder , 开源框架spring committer , golang开源网络库netpoll committer; (脱产备战25考研中,停更一年)
展开
-
stl案例2之员工分组
案例描述:实现步骤:#include<iostream>using namespace std;#include<map>#include<string>#include<vector>#include<ctime>#define CEHUA 1#define MEISHU 2#define YANFA 3//员工类class Worker{public: //无参构造 Worker(){} //有参构造函数进原创 2021-02-14 16:08:08 · 188 阅读 · 0 评论 -
map容器排序
#include<iostream>using namespace std;#include<map>class person {public: person(int id,int s,int m):id(id),salary(s),moneyBag(m){} int id; //员工编号 int salary; //工资 int moneyBag; //分红};//自定义排序规则class compare {public: bool opera.原创 2021-02-14 14:09:20 · 288 阅读 · 0 评论 -
map的查找和统计
注意:对于map容器来说,统计key元素出现的次数,结果只可能是1或者0,对于multimap容器来说可能大于1#include<iostream>using namespace std;#include<map>void print2(map<int, int>& m){ for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) { cout <<.原创 2021-02-14 12:08:28 · 475 阅读 · 0 评论 -
map容器的插入和删除
插入的四种方式: //会按照key进行排序 map<int, int> m1; //插入方式 //1. m1.insert(pair<int, int>(2, 520)); //2. m1.insert(make_pair(1, 2333)); //3. m1.insert(map<int, int>::value_type(0, 12345)); //4. m1[3] = 55555;访问容器里面元素的两种方式:区别:第一种方式访问,如.原创 2021-02-14 11:31:16 · 668 阅读 · 1 评论 -
map容器的大小和交换
函数原型:#include<iostream>using namespace std;#include<map>void print(map<int, int>& m1){ for (map<int, int>::iterator it = m1.begin(); it != m1.end(); it++) { cout << "键值: " << (*it).first << " 实值: "&l原创 2021-02-14 10:39:16 · 411 阅读 · 0 评论 -
map和multimap容器构造和赋值
简介:map中所有元素都是pairmap中第一个元素为key(键值)起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序本质:map和multimap容器属于关联式容器,底层结构是用二叉树实现优点:根据key值快速找到value值map和multimap容器区别:map容器中不能有重复key元素出现multimap容器中能有重复key元素出现map构造和赋值:#include<iostream>using namesp原创 2021-02-14 10:39:23 · 207 阅读 · 0 评论 -
string容器08之string字符串的字串获取
string字符串的字串获取#include<iostream>using namespace std;//string字符串的字串获取void test() { string s = "[email protected]"; cout << s.substr(0, 3) << endl; //实用性:例如获取邮箱的用户名 int pos=s.find('@'); cout << pos << endl; //注意下标是从0开始获取的 c原创 2021-02-08 14:20:07 · 275 阅读 · 0 评论 -
string容器07之string字符串的插入与删除
string字符串的插入与删除#include<iostream>using namespace std;//string字符串的插入与删除void test() { string s("dlikely"); //插入:insert s.insert(1, "hy "); cout << s << endl; //删除:erase s.erase(3, 1); cout << s << endl;}int main()原创 2021-02-08 14:08:13 · 225 阅读 · 0 评论 -
string容器06之string字符串的字符存取
string字符串的字符存取#include<iostream>using namespace std;//string字符串的字符存取void test() { string s = "dhy"; //[]读取字符 //s.size(); 字符串s的大小 //s.empty();判断字符串s是否为空 for (int i = 0; i < s.size(); i++) { cout << s[i] << " "; } cout &l原创 2021-02-08 13:58:26 · 147 阅读 · 0 评论 -
string容器05之string字符串的比较
string字符串的比较#include<iostream>using namespace std;//string字符串的比较void test() { string s1 = "abc"; string s2 = "abc"; int ret=s1.compare(s2); if (ret == 0) { cout << "s1==s2" << endl; } else if (ret > 0) { cout <<原创 2021-02-08 13:47:07 · 162 阅读 · 0 评论 -
string容器04之string字符串的查找与替换
string字符串的查找与替换#include<iostream>using namespace std;//string字符串的查找与替换void test() { string s1 = "abc dhy defg"; //查找: //find int ret = s1.find("dhy"); if (ret == -1) { cout << "查到个der" << endl; } else{ cout <<原创 2021-02-08 12:04:29 · 222 阅读 · 0 评论 -
string容器03之string字符串拼接
string字符串拼接#include<iostream>using namespace std;//string字符串拼接void test() { string s1("Good"); string s2 = " Bye"; s1 += s2; cout << s1 << endl; s1 += " The World"; cout << s1 << endl; s1 += '!'; cout << s原创 2021-02-08 11:36:05 · 181 阅读 · 0 评论 -
string容器02之string赋值操作
string赋值操作赋值函数原型:string& operator=(const char * s); //char* 类型字符串赋值给当前字符串string& operator=(const string &s); //把字符串s赋值给当前字符串string& operator=(char *s); //把字符s赋值给当前字符串string& assign(const char * s); //char* 类型字符串赋值给当前字符串string&am原创 2021-02-08 11:07:55 · 493 阅读 · 0 评论 -
string容器01之基本概念
本质:string是c++风格字符串,而string本质是一个类string和char*区别:char*是一个指针string是一个类,内部封装了char*,管理这个字符串,是一个char*型容器特点: string内部封装了很多成员函数:查找find,拷贝copy,删除delete,替换replace,插入insert… string管理char*所分配的内存,不用担心复制越界和取值越界等,由内内部进行负责string构造函数构造函数原型:string() 创建一个空字符串s原创 2021-02-08 10:45:45 · 94 阅读 · 0 评论 -
deque容器07之评委打分案例
评委打分案例案例描述:实现步骤:#include<iostream>using namespace std;#include<deque>#include<algorithm>#include<vector>#include<string>#include<ctime>//选手类class player{private: string name; int averageScore;public: pl原创 2021-02-10 09:58:02 · 159 阅读 · 0 评论 -
deque容器06之排序操作
排序操作函数原型:#include<iostream>using namespace std;#include<deque>#include<algorithm> //包含算法头文件//deque的排序操作void p(const deque<int>& d){ for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { cout &原创 2021-02-10 09:57:52 · 284 阅读 · 0 评论 -
deque容器05之[]和at读取元素
[]和at读取元素函数原型:#include<iostream>using namespace std;#include<deque>//deque的元素读取操作void realApply(){ deque<int>d1; d1.push_back(0); d1.push_front(2); d1.push_front(5); //[] for (int i = 0; i < d1.size(); i++) { cout <原创 2021-02-09 17:56:31 · 442 阅读 · 0 评论 -
deque容器04之插入和删除
插入和删除函数原型:两端插入操作:指定位置操作:#include<iostream>using namespace std;#include<deque>//deque的插入与删除操作void p(const deque<int>& d){ for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { //*it = 100; 加了const关原创 2021-02-09 17:41:57 · 240 阅读 · 0 评论 -
deque容器03之大小操作
大小操作函数原型:#include<iostream>using namespace std;#include<deque>//deque的大小操作void p(const deque<int>& d){ for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { //*it = 100; 加了const关键字后,就无法对数据进行修改 cout原创 2021-02-09 16:58:33 · 154 阅读 · 0 评论 -
deque容器02之赋值操作
赋值操作函数原型:#include<iostream>using namespace std;#include<deque>//deque的赋值操作void p(const deque<int>& d){ for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { //*it = 100; 加了const关键字后,就无法对数据进行修改 cout原创 2021-02-09 14:16:58 · 131 阅读 · 0 评论 -
deque容器01之构造函数
deque容器介绍功能:双端数组,可以对头部进行添加和删除的操作deque和vector的区别:vector对于头部的插入和删除效率低,数据量越大,效率越低deque相对而言,对于头部的插入和删除速度会比vector快vector访问元素时的速度比deque快,这和两者内部实现有关**deque内部工作原理: **deque内部有一个中控器,维护每段缓冲区的内容,缓冲区中存放真实数据,中控器维护的是每个缓冲区的地址,使得使用debug时像一片连续的内存空间deque容器的迭原创 2021-02-09 14:09:10 · 177 阅读 · 1 评论 -
queue容器常用接口
queue容器常用接口元素先进先出#include<iostream>using namespace std;#include<queue>#include<string>//queue常用接口class pig {public: pig(string n, int a):name(n),age(a){} int age; string name;};void t(){ pig p1("胖墩墩儿",3); pig p2("大胖墩儿",原创 2021-02-10 11:48:00 · 191 阅读 · 0 评论 -
queue容器基本概念
quque容器基本概念概念:Quque容器是一种先进先出的数据结构,它有两个出口队列容器可以从一端新增数据,从另一端删除数据队列中只有队头和队尾才能被外界使用,因此队列不能有遍历行为队列中进入数据称为—入队 push队列中出数据称为-----出队 pop...原创 2021-02-10 10:27:20 · 205 阅读 · 0 评论 -
list容器之排序案例
案例描述:将per类型进行排序,per属性中有姓名,年龄,身高,体重排序规则:按照年龄进行升序排列,如果年龄相同按照身高进行降序排列,如果身高相同按照体重进行升序排列源码如下:#include<iostream>using namespace std;#include<list>#include<string>class per {public: per(string name, int age, int height,int weight);原创 2021-02-11 08:45:36 · 516 阅读 · 0 评论 -
list容器之反转和排序
反转和排序注意:所有不支持随机访问的迭代器容器,不可以使用标准算法不支持随机访问的迭代器容器,内部会提供对应的一些算法#include<iostream>using namespace std;#include<list>//防止数据修改,只做读取操作void print(const list<int>& L){ for (list<int>::const_iterator it = L.begin(); it != L.end(原创 2021-02-11 08:45:30 · 255 阅读 · 0 评论 -
list容器之数据的存取
数据的存取注意:[]和at方式不能访问list容器里面的元素原因:list本质是链表,不是线性连续空间存储数据,迭代器也是不支持随机访问的,#include<iostream>using namespace std;#include<list>//防止数据修改,只做读取操作void print(const list<int>& L){ for (list<int>::const_iterator it = L.begin(); it原创 2021-02-11 08:45:21 · 347 阅读 · 0 评论 -
list容器的插入和删除
插入和删除#include<iostream>using namespace std;#include<list>//防止数据修改,只做读取操作void print(const list<int>& L){ for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) { cout << *it << " "; } cout &l原创 2021-02-10 14:42:53 · 343 阅读 · 0 评论 -
list容器的大小操作
大小操作#include<iostream>using namespace std;#include<list>//防止数据修改,只做读取操作void print(const list<int>& L){ for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) { cout << *it << " "; } cout <原创 2021-02-10 14:08:04 · 577 阅读 · 0 评论 -
list容器之赋值和交换
赋值和交换函数原型:#include<iostream>using namespace std;#include<list>void print(list<int>& L){ for (list<int>::iterator it = L.begin(); it != L.end(); it++) { cout << *it << " "; } cout << endl;}//list的原创 2021-02-10 13:54:15 · 183 阅读 · 0 评论 -
list容器之构造函数
构造函数常用函数:原创 2021-02-10 13:26:55 · 191 阅读 · 0 评论 -
list容器常用概念
ist容器常用概念功能:将数据进行链式存储链表的组成:由一系列节点组成节点的组成:由数据域和指针域组成STL中的链表是一个双向循环链表下图为一个双向链表,并未产生循环:因为链表的存储不是连续的内存空间,因此链表中的迭代器只支持前移和后移(无法实现begin()+2,+3…操作),属于双向迭代器list有一个重要性质,插入操作和删除操作都不会造成原有list容器失效,这在vector是不成立的,因为当所要输入数据大于vector容量的时候,vector容器会开辟一块更大空间来存放,之前的容器原创 2021-02-10 12:58:23 · 189 阅读 · 0 评论 -
pair对组
功能描述:成对出现的数据,利用对组可以返回两个数据两种创建方式:#include<iostream>using namespace std;#include<string>void test(){ pair<string, int> p1("大忽悠", 19); cout << p1.first << " " << p1.second << endl; pair<string, float>原创 2021-02-12 08:55:25 · 134 阅读 · 0 评论 -
set容器之自定义数据类型排序
自定义数据类型改变默认排序规则排序利用仿函数#include<iostream>using namespace std;#include<set>//自定义数据类型排序class per{public: per(string Name,int Age):name(Name),age(Age){} string name; int age;};class myCompare {public: //利用仿函数,重载() bool operator()(原创 2021-02-12 08:55:46 · 427 阅读 · 0 评论 -
set容器排序
内置类型指定排序规则主要技术点:利用仿函数,可以改变排序规则#include<iostream>using namespace std;#include<set>class myCompare {public: //利用仿函数,重载() bool operator()(int a, int b)const { //降序 return a > b; }};void p(const set<int>& s){ for (se原创 2021-02-12 08:55:34 · 398 阅读 · 1 评论 -
set容器和multiset容器的区别
区别:#include<iostream>using namespace std;#include<set>void p(const set<int>& s){ for (set<int>::const_iterator it = s.begin(); it != s.end(); it++) { cout << *it << " "; } //无法使用[]和at方式访问 //for (int i =原创 2021-02-12 08:55:16 · 202 阅读 · 0 评论 -
set容器的查找和统计
查找和统计#include<iostream>using namespace std;#include<set>void p(set<int>& s){ for (set<int>::iterator it = s.begin(); it != s.end(); it++) { cout << *it << " "; } cout << endl;}void test(){ set&l原创 2021-02-12 08:55:06 · 168 阅读 · 0 评论 -
set容器的插入与删除
插入与删除函数原型:#include<iostream>using namespace std;#include<set>void p(set<int>& s){ for (set<int>::iterator it = s.begin(); it != s.end(); it++) { cout << *it << " "; } cout << endl;}void test(){原创 2021-02-11 14:53:49 · 495 阅读 · 0 评论 -
set容器的大小和交换
大小和交换函数原型:#include<iostream>using namespace std;#include<set>void p(set<int>& s){ for (set<int>::iterator it = s.begin(); it != s.end(); it++) { cout << *it << " "; } cout << endl;}void test(){原创 2021-02-11 14:41:27 · 264 阅读 · 0 评论 -
set容器之构造和赋值
set和multiset容器set容器概念:所有容器在被插入时都会被自动排序本质:set和multiset属于关联式容器,底层结构是用二叉树实现set和multiset容器的区别:set容器不可以有重复元素multiset容器可以有重复元素set的构造和赋值#include<iostream>using namespace std;#include<set>void p(set<int>& s){ for (set<int>原创 2021-02-11 14:31:17 · 575 阅读 · 0 评论 -
stack栈常用接口
构造函数:赋值操作:数据存取:大小操作:在这里插入代码片原创 2021-02-10 10:03:45 · 264 阅读 · 0 评论