当前位置: 首页 > news >正文

第一章-语言基础\3.STL

目录

list

示例代码 

 vector

 示例代码

set

set 

示例代码

multiset 

 示例代码

unordered_set(仅做了解)

map 

map

 示例代码

 multimap

unordered_map

pair 

示例代码

queue

queue

例题练习

priority_queue优先队列(重要) 

例题练习

deque双端队列 

 stack

示例代码 


list

示例代码 

#include <bits/stdc++.h>
using namespace std;int main()
{//创建一个List<int>对象myList list<int> myList;//向myList尾部添加元素for (int i = 1;i <= 5;i++)myList.push_back(i); //从头到尾输出myList中的元素for (const auto &i : myList) cout << i << ' ';cout << '\n';//将myList中的元素反转reverse(myList.begin(),myList.end());for (const auto &i : myList) cout << i << ' ';cout << '\n';//在第一个元素的后一个位置加上元素0myList.insert(++myList.begin(),0);for (auto i : myList) cout << i << ' ';cout << '\n';//删除从三个元素到第六个元素这个区间(左闭右开)myList.erase(++++myList.begin(),--myList.end());//输出myList的大小cout << "链表大小为:" << myList.size() << '\n';//从头到尾输出myList中的元素for (auto i : myList) cout << i << ' ';cout << '\n';return 0;
}

 vector

 

#include <bits/stdc++.h>
using namespace std;int main()
{vector<int> v = {2,1,3,2,4,1,5,4};sort(v.begin(),v.end());auto last = unique(v.begin(),v.end());//指向第一个重复元素的迭代器v.erase(last,v.end());for (auto num : v)cout << num << ' ';cout << '\n'; return 0;
}//输出1 2 3 4 5

 示例代码

#include <bits/stdc++.h>
using namespace std;int main()
{vector<int> v;//向向量中添加元素v.push_back(5); v.push_back(2); v.push_back(8); v.push_back(1); v.push_back(2); v.push_back(8); v.push_back(9); //打印向量中的元素for (auto i : v){cout << i << ' ';} cout << '\n';//对向量进行排序sort(v.begin(),v.end());//打印排序后的向量cout << "排序后的向量" << '\n';for (auto i : v)cout << i << ' ';cout << '\n';//去除重复元素v.erase(unique(v.begin(),v.end()),v.end());//打印去重后的向量cout << "去重后的向量" << '\n';for (auto i : v){cout << i << ' ';} cout << '\n';//向向量中插入元素v.insert(v.begin()+2,3);v.insert(v.begin()+3,4);v.insert(v.begin()+4,5);//打印新的向量cout << "插入元素后的向量" << '\n';for (auto i : v){cout << i << ' ';} cout << '\n';//删除向量中某个元素v.erase(v.begin()+4);//打印删除元素后的向量cout << "删除元素后的向量" << '\n';for (auto i : v){cout << i << ' ';} cout << '\n';//检查向量是否为空if (v.empty()){cout << "向量为空" << '\n';} else{cout << "向量不为空" << '\n'; }//获取向量的大小cout << "向量的大小为:" << v.size() << '\n';//清空向量v.clear();//检查向量是否为空if (v.empty()){cout << "向量为空" << '\n';} else{cout << "向量不为空" << '\n'; }return 0;
}

set

set 

示例代码

#include <bits/stdc++.h>
using namespace std;int main()
{set<int> mySet;//插入元素mySet.insert(5); mySet.insert(2); mySet.insert(8); mySet.insert(2); //重复元素//遍历集合cout << "Set elements:";for (auto elem : mySet) {cout << elem << ' ';} cout << '\n';//查找元素int target = 5;auto it = mySet.find(target);if (it != mySet.end()) {cout << target << " found in the set." << endl;} else {cout << target << " not found in the set." << endl;}//移除元素int removeValue = 2;mySet.erase(removeValue);//查看移除后的集合cout << "Set elements after removal:";for (auto elem : mySet) {cout << elem << ' ';}cout << '\n';//清除集合mySet.clear();//检查集合是否为空if (mySet.empty()) {cout << "Set is empty." << endl;} else {cout << "Set is not empty." << endl;}return 0;
}

multiset 

 示例代码

#include <bits/stdc++.h>
using namespace std;int main()
{multiset<int> myMultiset;//插入元素myMultiset.insert(5);myMultiset.insert(2);myMultiset.insert(8);myMultiset.insert(2); //允许重复元素//遍历多重集合cout << "Multiset elements:";for (auto elem : myMultiset) {cout << elem << ' ';} cout << '\n';//查找元素int searchValue = 5;auto it = myMultiset.find(searchValue);if (it != myMultiset.end()) {cout << searchValue << " found in the multiset." << endl;} else {cout << searchValue << " not found in the multiset." << endl;}//移除元素int removeValue = 2;myMultiset.erase(removeValue);//查看移除后的多重集合cout << "Multiset elements after removal:";for (auto elem : myMultiset) {cout << elem << ' ';} cout << '\n';// Multiset elements after removal:5 8 所有2都被移除了//只移除第一个出现的目标值myMultiset.insert(2);myMultiset.insert(2);//遍历多重集合
//	cout << "Multiset elements:";
//	for (auto elem : myMultiset) {
//		cout << elem << ' ';
//	} 
//	cout << '\n';myMultiset.erase(myMultiset.find(removeValue));//查看去除第一个出现目标元素后的多重集合 cout << "Multiset elements:";for (auto elem : myMultiset) {cout << elem << ' ';} cout << '\n';//Multiset elements:2 5 8 //清空多重集合myMultiset.clear();//检查多重集合是否为空if (myMultiset.empty()) {cout << "Multiset is empty." << endl;} else {cout << "Multiset is not empty." << endl;}return 0;
}

unordered_set(仅做了解)

map 

map

 示例代码

#include <bits/stdc++.h>
using namespace std;int main()
{//创建并初始化mapmap<int,string> myMap = {{1,"Apple"},{2,"Banana"},{3,"Orange"}};//插入元素 insertmyMap.insert({4,"Grapes"}); //或者使用make_pair(4,"Grapes")创建键值对//查找和访问元素 通过键去查找值 cout << "Value at key 2:" << myMap[2] << endl; //遍历并打印map中的元素for (auto t : myMap) {cout << "Key:" << t.first << ",Value:" << t.second << endl;} //删除元素myMap.erase(3);//判断元素是否存在 if (myMap.count(3) == 0) {cout << "Key 3 not found." << endl;} //清空mapmyMap.clear();//判断map是否为空 if (myMap.size() == 0) { //或者用myMap.empty()来判断 cout << "Map is empty" << endl;} return 0;
}

 multimap

unordered_map

pair 

示例代码

#include <bits/stdc++.h>
using namespace std;//定义一个结构体,用来表示个人信息 
struct Person {string name;int age;
};int main() {//创建一个存储Person对象的向量vector<Person> people;//添加一些Person对象到向量中去people.push_back({"Alice",25});people.push_back({"Bob",30});people.push_back({"Charlie",20});//创建一个存储pair的向量,每个pair包含一个Person和一个评分vector<pair<Person,int>> scores;//添加一些pair到向量中scores.push_back({people[0],90}); scores.push_back({people[1],85}); scores.push_back({people[0],90}); for (const auto& t : scores) { //const表示不会对数据进行修改 &表示引用类型 cout << "Name:" << t.first.name << endl;cout << "Age :" << t.first.age << endl;cout << "Score:" << t.second << endl;cout << endl;}return 0;
} 

queue

queue

例题练习

0CLZ银行问题 - 蓝桥云课 

#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin >> n;queue<string> V,N;while (n--) {string op;cin >> op;if (op == "IN") {string name,q;cin >> name >> q;if (q == "V") {V.push(name);}else {N.push(name);}}else {string q;cin >> q;if (q == "V") V.pop();else N.pop();}}while (V.size()) {cout << V.front() << endl;V.pop();}while (N.size()) {cout << N.front() << endl;N.pop();}return 0;
}

priority_queue优先队列(重要) 

例题练习

0合并果子 - 蓝桥云课

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;int n;
priority_queue<ll,vector<ll>,greater<ll>> pq;int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin >> n;for (int i  = 1;i <= n;i++)  {ll x;cin >> x;pq.push(x);}ll ans = 0;while (pq.size() >= 2) {ll x = pq.top();pq.pop();ll y = pq.top();pq.pop();ans += x + y;pq.push(x+y);}cout << ans << endl;return 0;
}

deque双端队列 

 

 stack

示例代码 

#include <bits/stdc++.h>
using namespace std;int main() {stack<int> myStack;//向栈中插入元素myStack.push(10);myStack.push(20);myStack.push(30);myStack.push(40);//获取栈顶元素cout << "栈顶元素:" << myStack.top() << endl;//弹出栈顶元素myStack.pop();//再次获取栈顶元素cout << "栈顶元素:" << myStack.top() << endl;//检查栈是否为空if (myStack.empty()) {cout << "栈为空" << endl;} else {cout << "栈不为空" << endl;}//获取栈的大小cout << "栈的大小:" << myStack.size() << endl;return 0;  
}

 

相关文章:

  • https://juejin.cn/editor/drafts/7262346366541070395
  • 高性能网络优化:深入解析忙轮询(Busy Polling)技术
  • HTTP 与 HTTPS 的深度剖析:差异、原理与应用场景
  • 第11次:用户注册(简要版)
  • Ubuntu打开中文文本乱码
  • 使用AI应用开发平台搭建夸奖机器人,玩转AI【COZE入门案例-第1课】
  • 说下RabbitMQ的整体架构
  • STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
  • 爬虫技术-利用Python和Selenium批量下载动态渲染网页中的标准文本文件
  • CentOS配置了镜像源之后依旧下载元数据失败
  • 【MCP Node.js SDK 全栈进阶指南】专家篇(2):MCP多模型支持架构
  • CSS--图片链接垂直居中展示的方法
  • 用html+js+css实现的战略小游戏
  • tinyrenderer笔记(透视矫正)
  • 如何搭建spark yarn模式集群的集群
  • 树上背包学习笔记
  • 【mysql】常用命令
  • vue源代码采用的设计模式分解
  • accept() reject() hide()
  • Select Rows组件研究
  • 黄仁勋:中国AI市场将达500亿美元,美国企业若无法参与是巨大损失
  • 汪海涛评《线索与痕迹》丨就虚而近实
  • 这个接班巴菲特的男人,说不出一个打动人心的故事
  • 印巴军事对峙加剧,小规模冲突收场还是走向大战?
  • 最会说亚军感言的鲁德,站上了马德里公开赛的冠军领奖台
  • 禅定佛的微笑,从樊锦诗提到过的那尊说起