STL的认知

news2024/11/18 9:20:56

STL

  • vector 头文件<vector>
  1. 初始化,定义,定义长度,定义长度并且赋值,从数组中获取数据
  2. 返回元素个数size()
  3. 判断是否为空empty()
  4. 返回第一个元素front()
  5. 返回最后一个数back()
  6. 删除最后一个数pop_back()
  7. 插入push_back(x)
  8. 清空clear()
  9. begin()
  10. end()
  11. 使用size()遍历
  12. 使用begin()和end()遍历
  13. 使用auto遍历
  • pair 头文件<utility>
  1. 初始化,pair<int,int>,make_pair(1,1)
  2. 第一个元素first,第二个元素second
  3. 嵌套
  4. 排序
  • list 头文件<list>
  1. 删除 pop_front() pop_back() erase() remove()
  2. 插入 insert push_front() push_back() 
  3. 遍历 for(auto &e:list) cout<<e<<" ";
  4. 排序 sort()
  5. 转置 reverse()
  6. 去重 unique()
  • queue 头文件<queue>
  1. 初始化
  2. 长度size()
  3. 是否为空empty()
  4. 队尾插入push()
  5. 删除队头pop()
  6. 返回对头front()
  7. 返回队尾back()
  8. 清空,初始化
  • stack 头文件<stack>

  1. 初始化

  2. 长度size()

  3. 栈顶插入一个元素push()

  4. 返回栈顶元素top()

  5. 弹出栈顶元素pop()

  • string 头文件<string>

  1.     初始化
  2.     截取substr(1,5)
  3.     大小和长度 size() length()
  4.     头指针 c_str()
  5.     拼接 +
  6.     尾插 push_back()
  7.     插入 insert()
  • priority_queue 头文件<queue>
  1. 初始化,默认大根堆
  2. 长度size()
  3. 是否为空empty()
  4. 队尾插入push()
  5. 删除队头pop()
  6. 返回堆顶top()
  7. 清空,初始化
  • deque 头文件<deque>
  1. 初始化
  2. 长度size()
  3. 是否为空empty()
  4. 返回第一个元素front()
  5. 返回最后一个数back()
  6. 删除最后一个数pop_back()
  7. 插入push_back(x)
  8. 队首插入一个元素push_front()
  9. begin()
  10. end()
  • set 头文件<set>
  1. 初始化
  2. 返回元素个数size()
  3. 是否为空empty()
  4. 清空clear()
  5. 第几个数begin()
  6. 最后一个的后一个end()
  7. 插入insert()
  8. 查找find()
  9. 删除erase(x)
  10. 返回大于等于x的最小的的迭代器lower_bound(x)
  11. 返回大于x的最小的数的迭代器upper_bound(x)
  • map 头文件<map>
  1. 初始化
  2. 插入insert()
  3. 删除erase()
  4. 查找find()
  5. 个数count()
  6. 返回大于等于x的最小的的迭代器lower_bound(x)
  7. 返回大于x的最小的数的迭代器upper_bound(x)
  • unordered
  1. unordered_set
  2. unordered_map
  3. unordered_muliset
  4. unordered_multimap
  • algorithm 头文件<algorithm>
  1. 排序sort()
  2. 最值max、min
  3. 最大公约数__gcd
  4. 交换swap(a,b)
  5. 二分查找lower_bound()、upper_bound()
  6. 倒置reverse()
  7. 全排列next_permutation()

示例代码

vector 

#include<iostream>
#include<vector>
using namespace std;
int main () {
	//初始化一个vector,长度为10,值都为1
	vector<int> v0(10,1);
	//初始化v1,它的值从arr中拿,初始化v2,它的值从v1拿,使用三种遍历遍历出v2 
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    vector<int> v1(arr,arr+10);
    vector<int> v2(v1.begin(),v1.end());
	    //第一种
		for(int i=0;i<v2.size();i++) cout<<v2[i]<<" ";
		cout<<endl;
		//第二种
		for(auto i=v2.begin();i!=v2.end();i++) cout<<*i<<" ";
		cout<<endl;
		//第三种 
	    for(auto x:v2) cout<<x<<" ";
	    cout<<endl;
	//返回元素个数size()
	cout<<v2.size()<<endl;
	//判断是否为空empty()
	cout<<v2.empty()<<endl;
	//返回第一个元素front()
	cout<<v2.front()<<endl;
	//返回最后一个数back()
	cout<<v2.back()<<endl;
	//删除最后一个数pop_back()
	v2.pop_back();
	//插入push_back(x)
	v2.push_back(15);
	//清空clear() 
	v2.clear();
    return 0;
}

ede8cdff72dd4da38278c6981a478e3d.png

list 

#include<bits/stdc++.h>
using namespace std;

int main() {
	list<int> list;
	//empty() size()
	//尾插 
	for(int i=0;i<10;i++)
		list.push_back(i);
	//遍历 
	for(auto &e:list) cout<<e<<" ";
	auto p = find(list.begin(),list.end(),5);
	//插入 insert push_front() push_back() 
	list.insert(p,100);
	cout<<endl;
	for(auto &e:list) cout<<e<<" ";
	//删除 pop_front() pop_back() erase() remove()
	list.erase(p);
	cout<<endl;
	for(auto &e:list) cout<<e<<" ";
	cout<<endl;
	//排序
	list.sort();
	for(auto &e:list) cout<<e<<" ";
	cout<<endl;
	//去重 保证有序 
	list.unique();
	for(auto &e:list) cout<<e<<" ";
	cout<<endl;
	//remove
	list.remove(100);
	for(auto &e:list) cout<<e<<" ";
	cout<<endl;
	//转置
	list.reverse();
	for(auto &e:list) cout<<e<<" ";
	cout<<endl; 
	
	
}

 

pair

#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
using namespace std;

//根据first的值升序排序
bool cmp1(pair<int,int> a,pair<int,int> b) {
	return a.first < b.first;
}
//根据second的值升序排序
bool cmp2(pair<int, int> a, pair<int, int> b)
{
    return a.second < b.second;
}

int main () {
	//初始化,pair<int,int>,make_pair(1,1)
	pair<int,int> p(1,1);
	pair<int,int> q = make_pair(1,1);
	//第一个元素first,第二个元素second
	cout<<p.first<<endl;
	cout<<p.second<<endl;
	//嵌套
	pair<int,pair<int,int>> k(2,{1,1});
	//排序
	vector<pair<int, int>>vec;
    vec.push_back({ 1,2 });
    vec.push_back({ 4,2 });
    vec.push_back({ 3,3 });
    vec.push_back({ 2,1 });
    sort(vec.begin(), vec.end(), cmp1);
    cout << "根据first的值升序排序:" << endl;
    for (auto it = vec.begin();it != vec.end();it++)
    {
        cout << "(" << it->first << "," << it->second << ")" << endl;
    }
   	sort(vec.begin(),vec.end(),cmp2);
   	cout << "根据second的值升序排序:" << endl;
   	for (auto it = vec.begin();it != vec.end();it++)
    {
        cout << "(" << it->first << "," << it->second << ")" << endl;
    }
    return 0;
}

0356071fb59a41d99188724eebdced1f.png

queue

#include<iostream>
#include<queue>
using namespace std;

int main () {
	//初始化
	queue<int> q;
	//队尾插入push()
	q.push(1);
	q.push(2);
	q.push(3);
	//长度size()
	cout<<q.size()<<endl;
	//是否为空empty()
	cout<<q.empty()<<endl;
	//删除队头pop()
	q.pop();
	//返回对头front()
	cout<<q.front()<<endl;
	//返回队尾back()
	cout<<q.back()<<endl;
	//清空,初始化
	q = queue<int>();
    return 0;
}

67c683cb370a43e5ade17045f3d902e2.png

#include<iostream>
#include<stack>
using namespace std;

int main () {
	//初始化
	stack<int> s;
	//栈顶插入一个元素push()
	s.push(1);
	s.push(2);
	s.push(3);
	//长度size()
	cout<<s.size()<<endl;
	//返回栈顶元素top()
	cout<<s.top()<<endl;
	//弹出栈顶元素pop()
	s.pop();
	cout<<s.top();
    return 0;
}

525d72112cae48679e3dac44c0a4d0fe.png

string

#include<iostream>
#include<string>
using namespace std;

int main () {
	//初始化
	string s = "abcdefg";
	//截取
	string st = s.substr(1,5);
	cout<<st;
	//大小和长度 
	cout<<s.size()<<endl;
	cout<<s.length()<<endl;
	//头指针
	printf("%s",s.c_str()); 
	//拼接
	st = st + "111";
	cout<<st<<endl;
	//尾插
	s.push_back('h');
	cout<<s<<endl; 
	//插入
	s.insert(0,st,0,2);
	cout<<s<<endl; 
    return 0;
}

priority_queue

#include<iostream>
#include<queue>
using namespace std;

int main () {
	//初始化,默认大根堆
	priority_queue<int> pq;
	//队尾插入push()
	pq.push(1);
	pq.push(2);
	pq.push(3);
	//长度size()
	cout<<pq.size()<<endl;
	//是否为空empty()
	cout<<pq.empty()<<endl;
	//返回堆顶top()
	cout<<pq.top()<<endl;
	//删除队头pop()
	pq.pop();
	cout<<pq.top();
	//清空,初始化
	pq = priority_queue<int>();
    return 0;
}

 eacafc2942f140f58be562051ea6d830.png

deque 

#include<iostream>
#include<deque>
using namespace std;

int main () {
	//初始化
	deque<int> d;
	//队尾插入push_back(x)
	d.push_back(1);
	d.push_back(2);
	d.push_back(3);
	//长度size()
	cout<<d.size()<<endl;
	//是否为空empty()
	cout<<d.empty()<<endl;
	//返回第一个元素front()
	cout<<d.front()<<endl;
	//返回最后一个数back();
	cout<<d.back();
	//队首插入一个元素push_front()
	d.push_front(5);
	//删除最后一个数pop_back()
	d.pop_back();
    return 0;
}

5fbe0bf5c3554a5c8d566a4ad2725429.png

set

#include<iostream>
#include<set>
using namespace std;

int main () {
	//初始化
	set<int> s;
	//插入insert()
	s.insert(1);
	s.insert(2);
	s.insert(3);
	s.insert(4);
	s.insert(5);
	s.insert(6);
	//返回元素个数size()
	cout<<s.size()<<endl;
	//是否为空empty()
	cout<<s.empty()<<endl;
	//查找find()
	set<int>::iterator it = s.find(3);
	if(it==s.end()) cout<<false<<endl;
	else cout<<true<<endl;
	//删除erase(x)
	s.erase(2);
	//返回大于等于x的最小的的迭代器lower_bound(x)
	cout<<*s.lower_bound(3)<<endl;
	//返回大于x的最小的数的迭代器upper_bound(x)
	cout<<*s.upper_bound(3)<<endl;
	//清空clear()
	s.clear();
    return 0;
}

127d02bf4bbb458e874aa8e132b0e8f1.png

map

#include<iostream>
#include<map>
using namespace std;

int main () {
	//初始化
	map<int,int> m;
	//插入insert()
	//m[1] = 1;
	m.insert(make_pair(1,1));
	m.insert(make_pair(2,2));
	m.insert(make_pair(3,3));
	m.insert(make_pair(4,4));
	m.insert(make_pair(5,5));
	//删除erase()
	map<int,int>::iterator it = m.find(5);
	m.erase(it);
	//查找find()
	it = m.find(5);
	if(it==m.end()) cout<<false<<endl;
	else cout<<true<<endl;
	//返回大于等于x的最小的的迭代器lower_bound(x)
	it = m.lower_bound(3);
	cout<<it->second<<endl;
	//返回大于x的最小的数的迭代器upper_bound(x)
	it = m.upper_bound(3);
	cout<<it->second<<endl;
    return 0;
}

daa0e437fbe544888c2d6f85a01b875c.png

unordered_set

#include<iostream>
#include<unordered_set>
using namespace std;

int main () {
	//初始化
	unordered_set<int> us;
	//插入insert()
	us.insert(1);
	us.insert(2);
	us.insert(3);
	//删除erase()
	us.erase(3); 
	//查找find()
	unordered_set<int>::iterator it;
	it = us.find(3);
	if(it==us.end()) cout<<false<<endl;
	else cout<<true<<endl;
	//插入insert()
	us.insert(3);
	it = us.find(3);
	if(it==us.end()) cout<<false<<endl;
	else cout<<true<<endl;
    return 0;
}

9e497c0d30074c4ab1f91d24995e53af.png

algorithm

#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a,int b) {
	return a>b;
}

int main () {
	//排序 
	int arr[] = {1,3,2,5,4,9,7};
	int length = sizeof(arr)/sizeof(int);
	sort(arr,arr+length,cmp);
	for(int i=0;i<length;i++) {
		cout<<arr[i]<<" ";
	}
	cout<<endl;
	//最值
	cout<<max(1,3)<<endl; 
	//最大公约数
	cout<<__gcd(20,30)<<endl;
	//交换
	int a = 1;
	int b = 2;
	swap(a,b);
	cout<<a<<endl;
	//二分查找 
	int ar[] = {0, 1, 3, 5, 8, 10, 16};
    cout<<*lower_bound(ar, ar + 7, 3)<<endl;
    cout<<lower_bound(ar, ar + 7, 3)-ar<<endl;
    //倒置
	reverse(arr, arr + sizeof(arr) / sizeof(int)); 
	for(int i=0;i<length;i++) {
		cout<<arr[i]<<" ";
	}
	cout<<endl;
	//全排列
	int c[] = {1, 2, 3};
	do{
		cout << c[0] << " " << c[1] << " " << c[2] << endl;
	} while (next_permutation(c, c+3)); 
    return 0;
}

07b6bee5b84842a0a983c27ffd52db36.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1242027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最近整理一份steam搬砖的项目操作细节和详细要求

csgo饰品搬砖Steam饰品搬砖全套操作流程之如何卖货 一、国外Steam游戏装备汇率差项目 这个项目的基本原理是 购买国外Steam游戏平台上的装备&#xff0c;再在国内网易Buff平台上或国际站csgo饰品平台进行售卖。从充值汇率和两个平台的装备价格差中获得利润。 二、需要准备的硬…

企业微信身份验证

本篇主要是在上一篇获取第三方凭证基础上&#xff0c;用户通过三方网站自定义授权登录后获取用户信息&#xff0c;以实现用户绑定登录功能。 构造第三方应用授权链接 如果第三方应用需要在打开的网页里面携带用户的身份信息&#xff0c; 第一步需要构造如下的链接来获取授权c…

【Python爬虫】8大模块md文档从0到scrapy高手,第8篇:反爬与反反爬和验证码处理

本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识&#xff0c;通过本文我们能够知道什么是爬虫&#xff0c;都有那些分类&#xff0c;爬虫能干什么等&#xff0c;同时还会站在爬虫的角度复习一下http协议。 Python爬虫和Scrapy全套笔记直接地址&#xff1a; 请移步这…

如何使用Google My Business来提升您的内容和SEO?

如果您的企业有实体店&#xff0c;那么使用Google My Business&#xff08;GMB&#xff09;来改善您的本地SEO并增强您的在线形象至关重要。Google My Business &#xff08;GMB&#xff09; 是 Google 提供的补充工具&#xff0c;使企业能够控制其在 Google 搜索和地图上的数字…

大白话DDD(DDD黑话终结者)

大白话DDD&#xff08;DDD黑话终结者&#xff09; 一、吐槽的话 相信听过DDD的人有很大一部分都不知道这玩意具体是干嘛的&#xff0c;甚至觉得它有那么一些虚无缥缈。原因之一是但凡讲DDD的&#xff0c;都是一堆特别高大上的概念&#xff0c;然后冠之以一堆让人看不懂的解释…

echarts产品日常奇怪需求

设置最小刻度导致好多小数&#xff0c;限制两位 yAxis 指定的y轴设置 axisLabel&#xff0c;可以格式化显示 文档地址&#xff1a;https://echarts.apache.org/zh/option.html#yAxis.axisLabel.formatter yAxis: [{type: value,name: 利率,position: right,alignTicks: true,mi…

Go lumberjack 日志轮换和管理

在开发应用程序时&#xff0c;记录日志是一项关键的任务&#xff0c;以便在应用程序运行时追踪问题、监视性能和保留审计记录。Go 语言提供了灵活且强大的日志记录功能&#xff0c;可以通过多种方式配置和使用。其中一个常用的日志记录库是 github.com/natefinch/lumberjack&am…

安装MySQL搭建论坛

课前默写&#xff1a; 1、nginx配置文件的区域有哪些 ①全局区域 ②events区域 ③http区域 2、区域模块的作用 全局区域模块主要是用户和工作进程 events区域模块配置最大连接数时需先配置:vim /etc/limits.conf 因为系统默认最大是1024 http区域模块&#xff1a;代理地…

使用宝塔安装Alist

废话不多说&#xff0c;直接上教程&#xff0c;根据我的步骤一步一步来&#xff0c;肯定可以成功&#xff01; 我这边使用一键安装的时候&#xff0c;一致报错&#xff0c;提示证书过期&#xff0c;无奈我就开始了手动安装&#xff0c;下面的教程也是手动安装的教程 首先&…

监控员工上网有什么软件

监控员工上网的软件主要用于监控员工在工作时间内的网络行为&#xff0c;包括浏览网页、使用社交媒体、发送邮件等。通过监控员工上网行为&#xff0c;企业管理者可以更好地了解员工的工作状态和行为&#xff0c;规范员工的上网行为&#xff0c;提高工作效率&#xff0c;同时也…

每日一题:LeetCode-589.N叉树的前序遍历序列构造二叉树

每日一题系列&#xff08;day 01&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字

文章目录 1. 写在前面2. 读取验证码图像3. 生成颜色掩码4. 生成黑白结果图5. OCR文字识别6. 测试结果 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【…

【Unity实战】按物品掉落率,随机掉落战利品物品系统(附项目源码)

文章目录 前言开始参考源码完结 前言 当开发游戏时&#xff0c;一个常见的需求是实现一个物品随机掉落系统。这个系统可以让玩家在击败敌人或完成任务后获得随机的物品奖励&#xff0c;增加游戏的可玩性和乐趣。 在Unity中&#xff0c;我们可以通过编写代码来实现这样的战利品…

大模型AI Agent 前沿调研

前言 大模型技术百花齐放&#xff0c;越来越多&#xff0c;同时大模型的落地也在紧锣密鼓的进行着&#xff0c;其中Agent智能体这个概念可谓是火的一滩糊涂。 今天就分享一些Agent相关的前沿研究&#xff08;仅限基于大模型的AI Agent研究&#xff09;&#xff0c;包括一些论…

Ubuntu 1.84.2Visual Studio Code 下载配置与vscode查看内存Hex Editor插件,简单易懂

目录 前言 一 首先我为啥要重装Vs Code呢&#xff1f; 二 下载1.84.2Visual Studio Code 三 配置Vscode终端字体 四 安装插件 前言 这是一篇将老版本的VsCode下载至最新版的博文&#xff0c;从下载到调试全篇 一 首先我为啥要重装Vs Code呢&#xff1f; 因为我想安装这个…

14.(vue3.x+vite)组件间通信方式之pinia

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 Pinia简介 Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。 Pinia与Vuex比较 (1)Vue2和Vue3都支持,这让我们同时使用Vue2和Vue3的小伙伴都能很快上手。 (2)pinia中只有state、getter、action,抛弃了Vu…

2023年全国大学生数学建模竞赛总结

2023年全国大学生数学建模竞赛总结 一.参赛经历二.组队建议赛前准备建模手所需要具备的知识 编程手需要具备的能力 论文手论文手需要学习的知识 比赛过程 全国大学生数学建模竞赛的比赛落下了帷幕,很荣幸我能够获得国家二等奖,这对于我们队伍来说是十分荣幸的,接下来让我进行我…

UniApp打包教程:使用HBuilder X和AppUploader完成原生App云打包和上架指南

UniApp打包教程&#xff1a;使用HBuilder X和AppUploader完成原生App云打包和上架指南" 目录 uniapp进行打包 使用上架工具appuplode进行发包 1.登录appuploder软件 2.登陆开发者App Store后台 uniapp进行打包 在HBuilder X编辑器中打开需要打包的项目&#xff0c;然后…

电脑自动删除文件怎么办?如何恢复?

在数字化时代&#xff0c;电脑已经成为人们不可或缺的工具之一。然而&#xff0c;由于各种原因&#xff0c;我们有时会遇到电脑自动删除文件的情况&#xff0c;这给我们的工作和生活带来了很多不便。那么&#xff0c;当电脑自动删除文件时&#xff0c;我们应该如何处理呢&#…

redis-cluster集群(目的:高可用)

1、特点 集群由多个node节点组成&#xff0c;redis数据分布在这些节点中&#xff0c;在集群中分为主节点和从节点&#xff0c;一个主对应一个从&#xff0c;所有组的主从形成一个集群&#xff0c;每组的数据是独立的&#xff0c;并且集群自带哨兵模式 2、工作原理 集群模式中…