2021-04-22

STL常见容器简介

vector 变长数组(数组长度动态变化,运用了倍增的思想)
1、size() 返回元素个数
2、empty() 判断是否为空
3、clear() 清空
4、front() 返回第一个数
5、back() 返回最后一个数
6、push_back() 在最后插入一个数
7、pop_back() 删除最后一个数
8、迭代器:
begin() vector 的第0个数 (相当于a[0])
end() vector 的最后一个数的后面一个数 (相当于a[a.size])
9、[] vector 支持随即寻址
10、支持比较运算 按字典来比

#include<iostream>
#include<csdio>
#include<cstring>
#include<algorithm>
#include<vector> 
using namespace std;
int main(){
	//定义和初始化
	vector<int> a;
	//定义一个长度为10的vector a 
	vector<int> a(10); 
	//定义一个长度为10的vector a 并初始化为3 
	vector<int> a(10,3);
	//定义含有10个vector 的vector 数组a 
	vector<int> a[10]; 
	//返回元素个数 
	a.size();
	//返回类型时bool 用于判断vector a是否为空 
	a.empty(); 
	/*size() empty() 所有容器都有 且时间复杂度时O(1)*/
	//清空 
	a.clear(); 
    /*倍增思想:
		当系统在为某一个程序分配空间时 所需要的时间基本上与
		空间大小无关 主要与申请次数有关 所以要尽量减少申请空间的次数  (会造成空间浪费,用空间换时		   间);
		每一次数组长度不够的时候就把数组的长度乘以二 再把原来的原粗 copy 过来 平均每次插入一个			数O(1)的 
	*/
	//三种遍历方式:
	//1、运用下标遍历 
	for(int i=0;i<a.size();i++){
		cout<<a[i]<<" "
	} 
	cout<<endl;
	//2、迭代器遍历
	for(vector<int>::iterator i=a.begin();i!=a.end();i++) {
		cout<<*i<<" ";
	}
	cout<<endl;
	//3、范围遍历 auto 系统自动推断类型 
	for(auto x: a){
		cout<<x<<" ";
	} 
	cout<<endl;
	//vector 比较:
	vector<int> a(4,3),b(3,4);
	if(a<b)
		puts("a<b");
	else
		 puts("a>b");
}

pair<int,int> 存储二元组 类型任意
1、first pair的第一个元素
2、second pair的第二个元素
3、支持比较运算,按照字典序排序,或者以first为第一关键字,以second为第二关键字排序
4、可以嵌套使用 例如:
pair<int ,pair<int ,int>> q; 这样就可以存储三个元素

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
	//pair一般应用于存储某一个对象有两个不同(类型)的属性 (把需要排序的放在first) 
	//定义一个二元组,元素的类型可以任意 
	pair<int ,string> p;
	//传入两个元素构造一个pair 
	q=make_pair(10,"cxy");
	q={20,"cxy"}; 
	//取pair的第一个元素 
	cout<<p.first<<endl;
	//取pair的第二个元素 
	cout<<p.second<<endl;
	//pair 可以嵌套使用
	pair<int ,pair<int ,int> > q;//这样就可以存储三个元素  
}

string 字符串 c++ 把字符串进行了封装
1、size() 返回元素个数
2、empty() 判断是否为空
3、claer() 清空字符串
4、可以通过"+"来实现在字符串末尾插入一串字符 或者 一个字符
5、sbustr(x,len) x表示字串起始的下标 len表示取字串的长度 当x+len大于总长度时就会输出到最后一个字符为止
当只输入一个参数x的时候 那么就会从下表为x开始到字符串的末尾
6、c_str() 返回字符数组的起始地址

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){ 
	string a;
	//用加法实现字符串合并 
	a="cxy";
	a+='2';
	cout<<a<<endl;
	a+="fhy";
	cout<<a<<endl;
	//从下标1开始取长度为2的字串输出 
	cout<<a.substr(1,2)<<endl;
	//因为(1+20)>总长度所以只会输出到最后一个字符 
	cout<<a.substr(1,20)<<endl;
	// 当只输入一个参数x的时候 那么就会从下表为x开始输出到字符串的末尾 
	cout<<a.substr(1)<<endl;
	//当想用printf()输出一个string时 输出的时字符数组的其实地址
	printf("%s\n",a.c_str()); 
}

queue 队列 先进先出
1、size() 返回元素个数
2、empty() 判断是否为空
3、front() 返回队首元素
4、push() 向队尾插入一个元素
5、back() 返回队尾元素
6、pop() 弹出队首元素
7、不支持claer() 如果想要清空则可以直接再次构造一次队列

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int main(){ 
	int i,x;
	//定义一个类型为int的队列 q
	queue<int> q; 
	for(i=0;i<10;i++){
		q.push(i);
	}
	for(i=0;i<10;i++){
		x=q.front();
		printf("%d\n",x);
		q.pop();
	}
    //如果想要清空的话 则需要重新构造一下q 
	q=queue<int>();
    cout<<q.empty()<<endl;
}

stack 栈
1、size()
2、empty()
3、push() 向栈顶插入一个元素
4、top() 返回栈顶元素
5、pop() 弹出栈顶元素

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
int main(){ 
	stack<int> s;
	for(int i=0;i<10;i++){
		s.push(i);
	}
	x=s.size();
	printf("%d\n",x);
	cout<<s.empty()<<end;
	for(i=0;i<10;i++){
		int x;
		x=s.top();
		printf("%d ",x);
		s.pop();
	}
	printf("\n");
	cout<<s.empty()<<endl;
	return 0;
}

set,multiset 基于平衡二叉树(红黑树) 动态的维护有序序列
1、set(集合)里面不能有重复元素(加入重复元素的时候该操作会被忽略)
multiset 里面可以有重复元素
2、size()
3、empty()
4、clear()
5、insert() 插入一个数
6、find() 查找一个数
7、count() 返回某个数的个数
8、erase()
(1)如果输入的是一个数x 则会删除所有值为x的数 O(k+logn)
(2)如果输入的是一个迭代器,则会删除这个迭代器
9、lower_bound(x) 返回大于等于x的最小的迭代器
uper_bound(x) 返回大于x的最小的迭代器
如果不存在则返回end()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值