Day 6 上午

内容提要

STL


STL

首先,拒绝两个问题:

  • 这东西我自己也能写吖
  • 这东西怎么写吖(比如STL的sort是七八个排序放一块的...)

Pair

#include<utility>
using namespace std;
pair<typename1,typename2> variablename;

pair<int,int> x;
pair<double ,double> y;
pair<int,double> z;
pair<pair<int,int>int>a;

作为需要返回多个量的函数返回值

作为结构体的代替

比较大小:先比较第一个元素,如果相同再比较第二个,以此类推

String

string a;

代码%%%

可以赋值

a = b,a = "hello word"

a[i]:支持下表访问

a.size()字符串长度

a+b:字符串拼接

vector

有编号为1到3000*3000的人,每个人都属于一个队伍,一共有3000个队伍,每个队伍可能有任意多数人,也可能没有人,如何存数?

vector:不定长数组:不需要指定数组元素的数量,可以直接通过元素的个数分配内存

代码%%%

a[0]:随机下标访问

a.push_back():在末尾插入一个元素

a.pop_back:弹出末尾元素

a.front():访问第一个元素

a.back():访问最后一个元素

a.clear():清空一个vector

a.empty():返回vector是否为空

a.size():返回vector总元素的个数

以上的除了清空vector复杂度为O(n),其他均为O(1)

工作原理:每当你添加第2^n +1个元素时,就开一个连续的2^(n+1)的内存来存储

但是由于他每次要分配内存,所以会慢一些

样例:接受n个整数的输入,倒序输出

代码%%%%

迭代器

vector<int>::iterator it;

迭代器(iterator)的作用类似于指针,是一个指明元素位置的量。什么类型的vector就要用什么位置的迭代器

a.begin():返回第一个元素的迭代器

a.end():返回最后一个元素的后一个迭代器(因为左闭右开嘛)

*a.begin():等价于a.front()

*it:得到it指向的值

it++:得到下一个位置的迭代器

it+=i:得到下i个位置的迭代器,时间复杂度O(1)

it1 - it2:得到it1和it2之间的元素个数

遍历vector:

代码%%%

set:

集合:不能有重复元素+有序性

代码%%%

set的底层使用红黑树这个数据结构来维护集合

a.begin():第一个元素的迭代器

a.end():最后一个元素的后一个迭代器

a.insert():插入一个元素 O(log n)

a.erase():删除一个元素 O(log n)

a.find():寻找一个元素 O(log n)

a.count():查找某个元素的数量 O(log n)

a.lower_bound():查找大于等于某个值的第一个元素 O(log n)

a.upper_bound():查找大于某个值的第一个元素 O(log n)

a.equal_range():查找等于某个值的左闭右开区间,返回一个pair O(log n)

代码%%%(remove改成erase)

猜你喜欢

转载自www.cnblogs.com/lcezych/p/10804301.html