#include <vector> //必要导包
//TODO vector 容器vector<int> vector1;vector<int> vector2(10);//指定 10 个大小空间vector<int> vector3(10, 2);//指定 10 个大小空间每个值都是 2vector1.insert(vector1.begin(), 23);vector1.insert(vector1.begin(), 52);vector1.insert(vector1.begin(), 13);vector1.insert(vector1.begin(), 12);vector1.d(), 142);//更改第一个位置得值vector1.front() = 111;cout << "vector 第一个值为:" << vector1.front() << endl;//更改最后一个位置得值vector1.back() = 22;cout << "vector 最后一个值为:" << vector1.back() << endl;for (int i = 0; i < vector1.size(); ++i) {cout << "vector 当前 item值为:" << vector1[i] << endl;}
运行结果为:
vector 第一个值为:111
vector 最后一个值为:22
vector 当前 item值为:111
vector 当前 item值为:13
vector 当前 item值为:52
vector 当前 item值为:23
vector 当前 item值为:22
stack<int> stack;stack.push(23);stack.push(22);stack.push(51);stack.push(12);stack.push(92);//判断栈内是否有元素存在while (!pty()) {//输出第一个栈内元素auto stackint = p();cout << "stack 栈内元素为:" << stackint << endl;//弹栈stack.pop();//注意:弹栈之后栈内元素被释放}
运行结果为:
stack 栈内元素为:92
stack 栈内元素为:12
stack 栈内元素为:51
stack 栈内元素为:22
stack 栈内元素为:23
queue<int> queue;queue.push(42);queue.push(12);queue.push(22);queue.push(51);queue.push(56);while (!pty()) {//获取第一个元素auto queueint = queue.front();cout << "queue 当前元素为:" << queueint << endl;queue.pop();}
运行结果为:
queue 当前元素为:42
queue 当前元素为:12
queue 当前元素为:22
queue 当前元素为:51
queue 当前元素为:56
使用和 vector方法类似:
优先级队列内部封装了 vector
默认写法:(默认是从大到小排序):
priority_queue<int> priorityQueue;priorityQueue.push(42);priorityQueue.push(24);priorityQueue.push(12);priorityQueue.push(522);priorityQueue.push(6);while (!pty()) {auto priorityQueueint = p();cout << "priority_queue优先级队列元素为:" << priorityQueueint << endl;priorityQueue.pop();//和前边的一样,消费了就没了}
结果:
priority_queue优先级队列元素为:522
priority_queue优先级队列元素为:42
priority_queue优先级队列元素为:24
priority_queue优先级队列元素为:12
priority_queue优先级队列元素为:6
隐式代码:
priority_queue<int> priorityQueue; == priority_queue<int, vector<int>, less<>> priorityQueue;
从小到大排序:
priority_queue<int, vector<int>, greater<>> priorityQueue;//从小到大排列(注意第三个参数!)priorityQueue.push(42);priorityQueue.push(24);priorityQueue.push(12);priorityQueue.push(522);priorityQueue.push(6);while (!pty()) {auto priorityQueueint = p();cout << "priority_queue优先级队列元素为:" << priorityQueueint << endl;priorityQueue.pop();//和前边的一样,消费了就没了}
运行结果:
priority_queue优先级队列元素为:6
priority_queue优先级队列元素为:12
priority_queue优先级队列元素为:24
priority_queue优先级队列元素为:42
priority_queue优先级队列元素为:522
list<int> list;//插入到最前面list.insert(list.begin(), 12);list.insert(list.begin(), 22);list.insert(list.begin(), 5);list.insert(list.begin(), 122);list.insert(list.begin(), 54);//插入到最后面list.d(), 54);list.front() = 11;cout << "list 第一个元素为:" << list.front() << endl;list.back() = 11;cout << "list 最后一个元素为:" << list.back() << endl;/*** list.begin() 获取第一个元素* d() 最后一个元素* auto = std::list<int>::iterator*/for (std::list<int>::iterator it = list.begin(); it != d(); it++) {cout << "list 容器元素为:" << *it << endl;}//删除第一个元素ase(list.begin());for (std::list<int>::iterator it = list.begin(); it != d(); it++) {cout << "list 删除后元素为:" << *it << endl;}
运行结果:
list 第一个元素为:11
list 最后一个元素为:11
list 容器元素为:11
list 容器元素为:122
list 容器元素为:5
list 容器元素为:22
list 容器元素为:12
list 容器元素为:11
list 删除后元素为:122
list 删除后元素为:5
list 删除后元素为:22
list 删除后元素为:12
list 删除后元素为:11
用法和 vector 都类似
采用红黑树的模式,会对你存入的数据排序,但是不允许数据相同
也可以从大到小或从小到大排序;
//默认
// set<int ,less<int>> set;//从小到大排序set<int ,greater<int>> set1;//从大到小排序set1.insert(set1.begin(),123);set1.insert(set1.begin(),1);set1.insert(set1.begin(),42);set1.insert(set1.begin(),21);set1.d(),21);for (auto it = set1.begin(); it!= d(); it++) {cout << "set 元素为:" << *it << endl;}//set 容器插入元素//和 kotlin 和 C++中的 pair 一样//auto = pair<set<int , less<int>>::iterator , bool>//charu.first 返回的是第一个元素(iterator)//charu.second 返回的是第二个元素(bool)auto charu = set1.insert(51);//这里元素不能插入相同的!!!//charu.second判断容器中是否有插入的元素if (charu.second){cout << "set 容器插入成功" << endl;}else{cout << "set 容器插入失败" << endl;}
运行结果:
set 元素为:123
set 元素为:42
set 元素为:21
set 元素为:1
set 容器插入成功
在类中,重载()的函数叫仿函数
仿函数例子:
#include <algorithm>//for_each 算法包class ShowForEach {
public:void operator()(string pInt) {cout << "for_each方式二元素为:" << pInt << endl;}
};set<string, less<string>> set1;set1.insert(set1.begin(), "set元素 1");set1.insert(set1.begin(), "set元素 2");set1.insert(set1.begin(), "set元素 3");set1.insert(set1.begin(), "set元素 4");set1.insert(set1.begin(), "set元素 5");for_each(set1.begin(), d(), ShowForEach());
注意:这里的for_each()调用的是系统算法包中的函数,下一章:C++ 算法包有讲
运行结果为:
for_each方式二元素为:set元素 1
for_each方式二元素为:set元素 2
for_each方式二元素为:set元素 3
for_each方式二元素为:set元素 4
for_each方式二元素为:set元素 5
什么是谓词:
从上面的容器中可以看出,上面比较的都是 int 类型(基本类型),谓词是用来比较对象的,返回 bool 类型的仿函数叫谓词
参数有几个就成为几元谓词,例如有 2 个参数;成为 二元谓词
系统谓词:
set<int ,greater<int>> set1;//从大到小排序
set 集合中,第二个参数就是谓词,其他几个都一样
谓词的格式:
struct 结构体别名 {bool operator()(参数列表) {return ;}
};
自定义谓词:
#include <iostream>
#include <set>using namespace std;class Student {
public:string name;int id;Student(string name, int id) : name(name), id(id) {}
};struct sort1 {//TODO 自定义谓词 从小到大排序bool operator()(const Student &student1, const Student &student2) {return student1.id < student2.id;}
};struct sort2 {//TODO 自定义谓词 从大到小排序bool operator()(const Student &student1, const Student &student2) {return student1.id > student2.id;}
};int main() {//TODO 谓词//上面的容器都是比较基本类型 谓词是用来自定义容器来比较对象的!
// set<Student,less<Student>,bool> setVar1;
// set<Student,less<Student>> setVar2;
// set<Student> setVar3;//自定义谓词set<Student, sort1> setVar4;//(从小到大排序)
// set<Student, sort2> setVar4;(从大到小排序)Student st1("张三1", 122);Student st2("张三2", 12);Student st3("张三3", 32);Student st4("张三4", 242);Student st5("张三5", 3);setVar4.insert(st1);setVar4.insert(st2);setVar4.insert(st3);setVar4.insert(st4);setVar4.insert(st5);for (auto it = setVar4.begin(); it != d(); it++) {std::cout << it->id << "t" << it->name << endl;}return 0;
}
#include <map>//map容器必要导包map<int, string> map1;//map 存放元素方式一map1.insert(map1.begin(), pair<int, string>(1, "map 元素1"));map1.insert(map1.begin(), pair<int, string>(2, "map 元素2"));map1.insert(map1.begin(), pair<int, string>(3, "map 元素3"));//map 存放元素方式二map1[4] = "map 元素4";map1[4] = "覆盖元素 4";for (map<int, string>::iterator it = map1.begin(); it != d(); it++) {std::cout << it->second << endl;}
map容器特点:
map 容器是通过 key,value 存放元素的,如果 key 相同,那么就会覆盖掉上一个元素!
运行结果:
map 元素1
map 元素2
map 元素3
覆盖元素 4
multimap<int ,string> multimap1;multimap1.insert(multimap1.begin(),pair<int,string>(1,"multimap1"));multimap1.insert(multimap1.begin(),pair<int,string>(1,"multimap2"));multimap1.insert(multimap1.begin(),pair<int,string>(1,"multimap4"));multimap1.insert(multimap1.begin(),pair<int,string>(1,"multimap5"));multimap1.insert(multimap1.begin(),pair<int,string>(1,"multimap3"));// multimap1[2] = "multimap6";for (multimap<int, string>::iterator it = multimap1.begin(); it != d(); it++) {std::cout << it->second << endl;}
multimap特点:
和 map 相反,不会因为 key 相同而覆盖掉相同的值
运行结果:
multimap3
multimap5
multimap4
multimap2
multimap1
下一篇:C++ 算法包(find/find_if,for_each,transform,count/count_if,merge,sort,copy,replace)简单使用
原创不易,您的点赞就是对我最大的支持~
本文发布于:2024-01-30 03:34:42,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170655688418941.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |