算法笔记第六章总结--STL

STL总结

1. vector()

头文件:include<vector>

定义:动态数组
  • vector <int> name;
  • vector <int> name[10];类似二维数组,一个维度长度固定
  • vector <vector< int> > name;两个维度的长度都不固定
vector内元素的访问:

以vector< int> name为例

  • 下标访问:
    通过name[i];
  • 通过迭代器访问:
vector < int>::iterator it = name.begin();
name[i] = *(it+i)
  • 只有vector和string才能用name.begin()+3这种写法
常用函数:
  1. push_back()
    在vector最后添加元素。 O(1)
  2. pop——back()
    删除vector的尾元素。 O(1)
  3. size()
    元素个数。O(1)
  4. clear()
    清空所有元素。 O(N)
  5. insert(it,x)
    向迭代器it处插入x O(N)
  6. erase()
  • 删除单个元素erase(it) O(N)
  • 删除区间内元素erase(first,last) O(N)
    name.erase(name.begin(),name.end()) = name.clear()

2. set()

定义:元素有序,不重复的容器
  • set< int> name
set内元素的访问:
  • 只能通过迭代器访问,不支持*(it+i)
for(set< int>::iterator it = name.begin();it!=name.end();it++)
    printf("%d ",*it);
常用函数:
  1. insert(x)
    将x插入set中自动排序去重。 O(logN)
  2. find(value)
    返回set中值为value的迭代器 O(logN)
  3. erase()
  • 删除单个元素
    (1). erase(it) it为迭代器,一般结合find函数来用 O(1)
    name.erase(name.find(100));
    (2). erase(value)
    value为元素的值。 O(logN)
  • 删除一个区间内的所有元素
    name.erase(first,last) O(last - first)
  1. size()
    set内元素的个数 O(1)
  2. clear()
    清除所有元素。 O(N)

3.string

头文件include<string>

定义:

string str

string中内容的访问:
  • 通过下标访问
    读入和输出整个字符串只能用cin,cout
    或者是通过c_str()将string转换成字符串数组
    printf("%s",str.c_str());
  • 通过迭代器访问
    string::iterator it
for(it = str.begin();it!=name.end();it++)
    printf("%c",*it);
常用函数:
  1. +
    实现字符串拼接
  2. > < <= >= !=
    实现字符串的比较
  3. length() / size() O(1)
    获取字符串长度
  4. insert() O(N)
    (1)insert(pos,string)
    在pos号位置插入字符串string
    (2)insert(it,it2,it3)
    it为原字符串待插入位置,it2,it3为待插字符串首尾迭代器
  5. erase() O(N)
  • str.erase(it)
    删除单个元素,it为迭代器
  • str.erase(pos,length)
    删除一个区间的元素,pos为起始位置,length为删除字符个数
    eg:str.erase(3,2);
  1. clear() O(1)
    清空string中的元素
  2. substr()
    substr(pos,len)返回从pos位开始长度为len的子串O(len)
  3. string::npos值为-1或unsigned_int的最大值,作为find函数失配的返回值
  4. find() O(mn) (mn为两字符串的长度)
  • eg:str.find(str2);
    若str2是str的字串,返回第一次出现的位置
    否则返回string::npos
  • str.find(str2,pos)
    从pos位开始匹配str2
  1. replace()
  • str.replace(pos,len,str2)
    把str从pos位开始长度为len的字符替换为str2
  • str.replace(it1,it2,str2)
    把迭代器[it1,it2)范围内的字串替换为str2

map

定义:映射

map<typename1,typename2> mp
第一个是键的类型,第二个是值的类型
eg:

  • map <string,int> mp;字符串到整形的映射
    必须使用string不能用char数组
  • map<set<int>,string> mp;set容器映射到字符串
map容器内元素的访问:
  • 通过下标访问
map<char,int> mp;
mp['c'] = 30;
printf("%d",mp['c']);

输出为30。

  • 通过迭代器访问 map的迭代器的定义与使用与其他容器不同
    定义:map<typename1,typename2>::iterator it
    it同时访问键和值。通过it->first访问键,it->second访问值。
map<char,int> mp;
mp['c'] = 30;
mp['a'] = 10;
mp['d'] = 40;
for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++)
{
	printf("%c %d\n",it->first,it->second);
}

map根据键从小到大排序。

常用函数:
  1. find(key) O(logN)
  2. erase()
  • 删除单个元素
    (1) mp.erase(it) it为需要删除的元素的迭代器O(1)
    (2) mp.erase(key) key为欲删除的键 O(logN)
  • 删除一个区间的所有元素
    mp.erase(first,last) **O(last - first)**first为起始迭代器,last为末尾迭代器的下一个地址
  1. size() O(1)
    获取map中映射的对数。
  2. clear() O(N)
    清空map中的所有元素

queue

定义:队列,先进先出

queue<typename> name;

queue内元素的访问:

queue<int> q;

  • q.front()访问队首元素
  • q.back()访问队尾元素
常用函数:
  1. push() O(1)
    push(x)将x入队
  2. front(),back() O(1)
    访问队首,队尾元素。
  3. pop() O(1)
    令队首元素出队
  4. empty() O(1)
    检测队列是否为空,反回ture为空,false为非空
  5. size() O(1)
    返回队列内个数
    使用front(),pop()前必须用empty()判断是否为空

priority_queue

定义:优先队列,队首元素为优先级最高元素

头文件:#include
priority_queue<typename> name;

优先队列中元素的访问:

只能透过top()函数来访问。

常用函数:
  1. push() O(logN)
    push(x)将x入队。
  2. top() O(1)
    获得队首元素。
  3. pop() O(logN)
    队首元素出队。
  4. empty() O(1)
    检测队列是否为空,反回ture为空,false为非空
  5. size() O(1)
    返回队列内个数
优先级的设置
(1)基本数据类型的优先级设置

两种优先队列设置
priority_queue\<int> q;
priority_queue\<int,vector\<int>,less\<int> > q;

  • 参数vector<int>用于承载底层数据结构堆的容器,类型与第一个参数的类型相同。
  • less<int>表示数字大的优先级越大。
  • 换成greater<int>表示数字小的优先级越大。
(2) 结构体的优先级设置

stack

定义:栈,后进先出

头文件:#include<stack>
stack<typename> name;

stack 容器内元素的访问:

只能通过top()访问栈顶元素

常用函数
  1. push() O(1)
    push(x)将x入栈。
  2. top() O(1)
    获得栈顶元素。
  3. pop() O(1)
    栈顶元素出栈。
  4. empty() O(1)
    检测栈是否为空,反回ture为空,false为非空
  5. size() O(1)
    返回队列内个数

pair

定义:用于将两个元素绑在一起作为一个合成元素。
头文件:include<utility>
pair<string,int> p;
定义时初始化:pair<string,int> p("haha",5);
代码中临时构建pair:

  • pair<string,int>("haha",5)
  • make_pair("haha",5)
    p中的两个元素通过p.first,p.second访问。比较时先比较first,相等则比较second。

algorithm头文件下的常用函数

1.max(),min(),abs()
  • max(x,y)
    返回最大值
  • min(x,y)
    返回最小值
  • abs(x)
    x为整数,返回x的绝对值。若为浮点型用math头文件下的fabs()
2.swap()
  • swap(x,y)交换x,y的值
3.reverse()
  • reverse(it,it2)将数组或者迭代器在(it,it2]范围内的元素反转。
4.next_permutation()
  • 给出一个序列在全排列中的下一个序列
int a[10] = {1,2,3};
do
{
  printf("%d%d%d\n",a[0],a[1],a[2]);
}while(next_permutation(a,a+3));
5.fill()

这里赋值与memset不同可以是范围内的任意值。

int a[5];
fill(a,a+5,100);
6.sort()

用于排序

7.lower_bound(),upper_bound()
  • lower_bound()
    寻找数组或容器中第一个值大于等于元素的位置
  • upper_bound()
    寻找数组或容器中第一个值大于元素的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值