C++STL总结

1. vector 变长数组,倍增思想.

size()         返回元素个数

empty()     返回是否为空

clear()       清空

front()/back() 返回第一个数/返回最后一个数

push_back()/pop_back() 在最后插入一个数/把最后一个数删掉

begin()/end() 第0个数/最后一个数的后面那个数

支持比较运算,按字典序

基本思想:

系统为某一程序分配空间的时候,所需的时间基本与空间大小无关,与申请次数有关。

先申请一段长的空间存入元素,当不够存时则创建一个大小为原来两倍的空间,并把元素复制进去。

2. pair<int, int> 可以存储一个二元组

first 第一个元素

second 第二个元素

支持比较运算,按字典序(以first为第一关键字,second为第二关键字)

3. string 字符串,重要的函数:substr(), c_str().

size()

empty()

clear()

4. queue 队列

size()

empty()

push() 向队尾插入一个元素

front() 返回队头元素

back() 返回队尾元素

pop() 弹出队头元素.

priority_queue 优先队列(默认是大根堆)

push() 往堆中插入元素

top() 返回堆顶

pop() 弹出堆顶

5. stack 栈

size()

empty()

push() 往栈顶添加元素

top() 返回栈顶元素

pop() 弹出栈顶元素

6. deque 双端队列

size()

empty()

clear()

front()

back()

push_back()/pop_back()

push_front()/pop_front()

begin()/end()

快速寻址[ ]

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

size()

empty()

clear()

begin()/end()  ++, -- 返回前驱和后继

set & multiset:set里面不可以有重复元素,multiset里面可以有重复元素。

(1) set/multiset

insert() 插入一个数

find() 查找一个数

count() 返回某一个数的个数

erase() 如果输入是一个数,删除所有等于这个数的节点O(k + logn);如果输入是一个迭代器,那么删除这个迭代器;

lower_bound(x)/upper_bound(x) 返回大于等于x的迭代器/返回大于x的迭代器。

(2) map/multimap

insert() 插入的数是一个pair

erase() 输入的参数是pair或者迭代器

find()

[] 可以像用数组一样使用它 O(logn).

8. unordered_set, unodered_map, unordered_multiset, unordered_multimap 基于哈希表

和上面类似,增删查改的时间复杂度为O(1)

不支持lower_bound/upper_bound() 迭代器++--(跟排序有关的所有操作都不支持)

9. bitset 压位

要存1024个bool元素,C++里面bool类型是一个字节,所以需要1024个字节,但如果压到一个字节存8位,则只需要128字节就存完了

bitset<10000> S;

~, &, |, ^, >>, <<, ==, !=, [],

count() 返回1的个数

any() 判断是否至少有一个1

none() 判断是否全为0

set() 把所有位置变为1

set(k, v) 将第k位变成1

reset() 把所有位变为0

flip() 等价于所有位取反

flip(k) 把第k位取反

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<deque> 
#include<set> 
#include<map> 
using namespace std;

int main()
{	
	vector<int> a;
	//vector<int> a(10);
	//vector<int> a(10, 3);
	//vector<int> a[10];//定义了十个vector 
	//for(auto x : a) cout << x << endl;
	for(int i = 0; i < 10; i ++) a.push_back(i);
	
	for(int i = 0; i < a.size(); i ++) cout << a[i] << ' ';
	cout << endl;
	//vector<int>::iterator 可以直接写成auto 
	for(vector<int>::iterator i = a.begin(); i != a.end(); i ++) cout << *i << ' ';
	cout << endl;
	
	for(auto x: a) cout << x << ' ';
	cout << endl; 
	//支持比较运算 
	vector<int>b1(3, 4), b2(4, 3);
	if(b1 > b2) puts("b1 > b2");
	/**********************************************/
	pair<int, string> p;
	p = make_pair(10, "abc");
	p = {20, "abc"};
	
	pair<int, pair<int, int>> p1;
	
	/*********************************************/
	string s = "abc";
	
	s += "def";
	s += 'c'; 
	
	cout << s << endl;
	cout << s.substr(1, 2) << endl;//从s[1]开始,子串长度为2 
	s.substr(1, 10);//从1开始整个 
	s.substr(1); //从1开始整个 
	printf("%s\n", a.c_str());//返回存储字符串的起始地址
	
	/********************************************/
	queque<int> q;
	q = queue<int>(); 
	
	/*********************************************/ 
	priority_queue<int> heap;
	//如果要定义小根堆
	//heap.push(-x)//方法一:插入负数
	
	priority_queue<int, vector<int>, greater<int>> small_heap; 
	//方法二:直接定义小根堆 
	/*********************************************/
	map<string, int> m;
	m["abc"] = 1;
	cout << m["abc"] << endl;
	
	return 0; 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值