STL的认知

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ོ栖落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值