STL

1、vector变长数组(动态数组)

可以动态改变数组长度,每次改变时间复杂度大概是O(1)的
系统为某一程序分配空间时,所需时间,与分配大小无关,与分配次数有关
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
	vector<int> a;
	//vector<int> a(10);
	//vector<int> a(10,3);        //建立一个长度为10,值全为3的vectoe 
	int L=a.size();	       //元素个数,时间复杂度是O(1)的 
	if(a.empty()); 	       //判断数组是否为空,空的返回teur
	a.clear();		       //清空
	int n=a.front();	       //返回第一个数 
	int m=a.back();               //返回第二个数
	a.push_back(n);	               //在vector最后插入一个数n
	a.pop_back();                  //删除最后一个数
	                               //迭代器为begin/end
	                               //[]	 支持 
                                       //支持比较运算,两个vector容器会按照字典序比较vector<int> a(4,3)>vector<int> b(3,4)
        
	for(int i=0;i<10;i++)
		a.push_back(i);
	for(int i=0;i<a.size();i++)		//与下面的等效 
		cout<<a[i]<<" ";
	for(vector<int>::iterator i=a.begin();i!=a.end();i++)
		cout<<*i<<" ";
	for(auto x:a)			//dev好像不支持auto 
		cout<<x<<" ";	 
	return 0;
}

2、string字符串

        string a="yxc";
        a+="def";
	a+='c';
	int L=a.size();
	if(a.empty())
	a.clear();
	string s=a.substr(1,2)		//从1位置,取长度位2的子串,要是长度大于原字符串长度,不会多输出。不改变原字符串
	string s=a.substr(1);		//省略第二个参数,直接输出从1到最后
	printf("%s",a.c_str());		//要用printf输出字符串,c_str()返回字符串首地址 

3、queue队列、priority_queue优先队列

queue<int>a;
	a.push(n);			//在队尾插入n
	int n=a.front();	//返回队头元素
	int w=a.back();		//返回队尾元素 
	a.pop();			//弹出对头元素			 
	int l=a.size();
	if(a.empty());

priority_queue<int> heap;		//默认为大根堆
	heap.push(n);
	int m=heap.top(); 				//返回堆顶元素 
	heap.pop();						//弹出堆顶元素 
	priority_queue<int,vector<int>,greater<int>>heap;//小根堆 
	

4、stack栈


        stack<int>a;
	a.push(n);			//向栈顶加入一个元素
	int m=a.top();		//返回栈顶元素
	a.pop();			//弹出栈顶元素 
	int l=a.size();
	if(a.empty()) 



5、deque双端队列    队头队尾都可以插入删除,可以随机访问


        duque<int>a;
	a.push_back(n);		//在队尾插入n
	a.push_front(n);	//在队首插入元素 
	int n=a.front();	//返回队头元素
	int w=a.back();        //返回队尾元素 
	a.pop_front();		//弹出队头元素	
	a.pop_back();		//弹出队尾元素		 
	int l=a.size();
	if(a.empty())
	a.clear();
                //支持[]


6、set、map、multiset、multimap基于平衡二叉树(红黑树),动态维护有序序列


    set<int> s;
	multiset<int> ms;
	s.insert(n);			//插入一个元素n
	s.find(n); 				//查找元素n 
	int sum=s.count(x);		//返回x的个数
	s.erase(x);				//删除所有的x,x如果是迭代器,删除迭代器,复杂度O(k+logn) 
	int a=lower_bound(x);	//返回大于等于x的最小的数的迭代器,不存在返回end 
	int b=upper_bound(x);	//返回大于x的最小的数的迭代器 
	int l=s.size();
	if(s.empty())
	s.clear();  

         map<string,int>a; 
	a["yxc"]=1;              //类似数组的用法
	insert();		 //插入的数是一个pair 
	erase();	        //参数为pair或者迭代器 
	find();
				//[]支持,时间复杂度是O(logn)
	int a=lower_bound(x);	//返回大于等于x的最小的数的迭代器,不存在返回end 
	int b=upper_bound(x);	//返回大于x的最小的数的迭代器 
	


7、unordered_set、unordered_map、unordered_multiset、unordered_multimap哈希表

unorder_multimap<string,int>a;
	//与上面对应,但是不支持lower_bound和upper_bound,也不支持迭代器++--






8、bitset压位

在一个字节上存8位,比bool省8倍内存

        bitset<10000> s;	//<>里写个数 
						//支持位运算 
						//支持[]
	count();			//返回有多少个1	
	any();				//判断是否至少有一个1
	none();				//判断是否全为0 
	set();				//把所有位置成1	
	set(k,v);			//把第k位变成v
	reset()				//把所有位变成0
	flip();				//等价与~
	flip(k);			//把第k位取反

9、pair二元组


pair<int,int>a;    //两个类型是任意的
first是第一个元素
second是第二个元素
支持比较
支持排序,以first为第一个关键字,second为第二个关键字,字典序排列
可以直接这样写
p=make_pair(10,"yxc");
p={10,:yxc};
要是有三个元素的话,可以pair里面套pair
pair<int,pair<int,string>>p;





全部评论

相关推荐

Jing_Rainb...:小公司搞出大厂流程,要么是真缺技术大牛,要么是老板的偶像包袱😂…面完记得来更新后续!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务