简介c++ STL的常用方法_知识点

#以下type可以代表int char float double或者string vector set等等 即是数据类型的都可以

 

vector    容器类   头文件 <vector>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
定义      之间可以进行=  ==  !=  等逻辑运算 如v1==v2  判断两个容器是否相等
vector<type>v
vector<type>v(v1)    即v=v1
vector<type>v(n)     确定容器的初始容量
vector<type>v(n,first) 确定容器的初始容量和初始值
 
常用方法
v.assign(v1.begin(),v1.end())  v1从begin到end的位置的元素给v  覆盖操作
v.size()        返回容器的个数
v[i]类似v.at(i) 取出第i个数  第一个为0
v.begin()       得到数组头的指针
v.end()         得到数组的最后一个单元+1的指针
v.front()      得到数组头的引用
v.back()        得到数组的最后一个单元的引用
v.max_size()    得到vector最大可以是多大
v.capacity()    当前vector分配的大小
v.resize(n)      改变当前使用数据的大小,如果它比当前使用的大,或者填充默认值
v.resize(n,i)       更改为n长 如果新增加的 初始化为i
v.reserve()     改变当前vecotr所分配空间的大小   少用
v.rbegin()      将vector反转后的开始指针返回(其实就是原来的end-1)
v.rend()        将vector反转构的结束指针返回(其实就是原来的begin-1)
v.empty()       判断vector是否为空
v.swap(v1)        与另一个vector交换数据
 
插入移除操作
v.push_back(i)  在数组的最后添加i
v.pop_back()    去掉数组的最后一个数据
v.erase(iterator it)       删除指针指向的数据项     要使用迭代器
v.erase(begin , end)   删除[begin,end)的区间
v.clear()       清空当前的vector
v.insert(iterator,n)   在指向的地方 插入n
v.insert(iterator,k,n)   在指向的地方 连续插入k个n
v.insert(iterator,begin,end)  在指向的地方 插入[begin,end) 区间的元素

 

set 集合类 头文件<set>    ///set比multiset常用 两者用法基本一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
定义       放入集合内的元素 都是有序存放的 所以每次插入都是logN 因为集合的唯一性,同一个元素 放进去两次,只会保留一个
set<type>s
set<type,cmp>s     重载比较符号 就是默认是从小到大排序 可以改写成从大到小     
multiset<type>mts     ///这个要注意 如果放10个2进去 里面会有10个2 而set只会保存1个
 
插入移除操作
s.insert(k)     插入元素k,多次插入同一个元素后面无效  
s.insert(a, b)  插入指针[a, b)之间的元素,已有元素不会再次插入  
s.erase(k)      删除元素k,若不存在则删除无效   ///如果在multiset内这样 会把10个2都删除 应该mts.erase(mts.find(k));
s.erase(it)     删除迭代器it对应的元素
s.erase(l, r)   删除迭代器[l, r)之间的元素
 
常用方法
s.count(k)  判断元素k是否在容器内 
s.clear()   清空容器
s.size()    返回容器现有元素个数
s.empty()   判断容器是否为空
s.begin()  返回set中第一个元素,类型为正向迭代器
s.rbegin() 返回set中最后一个元素,类型为反向迭代器
s.end()    返回set中最后一个元素,类型为正向迭代器
s.rend()   返回set中第一个元素,类型为反向迭代器
s.find(k)  寻找k,若找到返回对应的迭代器,否则返回end()
s.lower_bound(k)  返回第一个大于等于k的元素的迭代器
s.upper_bound(k)  返回第一个大于k的元素的迭代器

 

map  映射类  头文件<map>    ///这个很常用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
定义     内部实现方法为红黑树
map<type,type>m     基中 第一个type为key 第二个type为value  注意 key值唯一
插入操作
如 map<string, int >m   想添加一个元素进去 可以
m[abc]=1或者m.insert(make_pair( "abc" ,1))   
再用 printf ( "%d\n" ,m[ "abc" ]);就会输出1
这里可以看出来 像数组 我想访问第i个 就a[i] 这里的key=i value=a[i]   映射就没有局限 可以用各种类型当key value也是
 
查找与删除操作
it=m.find(key)    反回一个pair类型  要用迭代器接收 使用it->first为key it->second为value
it=m.find(key)  m.earse(it);
 
常用方法
begin()          返回指向map头部的迭代器
empty()          如果map为空则返回 true
end()            返回指向map末尾的迭代器
rbegin()         返回一个指向map尾部的逆向迭代器
rend()           返回一个指向map头部的逆向迭代器
size()           返回map中元素的个数
swap()           交换两个map
lower_bound()    返回键值>=给定元素的第一个位置
upper_bound()    返回键值>给定元素的第一个位置
 
value_comp()     返回比较元素value的函数
equal_range()    返回特殊条目的迭代器对
clear()         删除所有元素
count()          返回指定元素出现的次数
key_comp()       返回比较元素key的函数
get_allocator()  返回map的配置器
max_size()       返回可以容纳的最大元素个数
 
 

 

queue   队列类   头文件<queue>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
定义   先进来先出去像排队一样  衍生类 优先队列 priority_queue  这个比队列常用
queue<type>q
priority_queue<type>pri_q  定义一个有序队列(默认从小到大排,其顶端元素为最大的那个)
priority_queue<(队列中元素的数据类型), (用于储存和访问队列元素的底层容器的类型), (比较规则) > k  
priority_queue< int , vector< int >, greater< int > > k;(注意:比较规则后面必须要空上一格) ->定义一个有序队列,
排序规则为从大到小(其顶端元素为最小的那个)(greater为从小到大,顶端最小,less为从大到小,顶端最大)
 
q.empty() 查看是否为空范例,是的话返回1,不是返回0
q.push(i) 从已有元素后面增加元素i(队伍大小不预设)
q.pop()   清除位于顶端的元素(当然是排完序后,下同)
q.front()   q.top()   队列用前者,优先队列内部实现为堆,top为堆顶的意思     显示顶端的元素
q.size()  输出出现有元素的个数
 
例子-->>http: //www.dengwenhuo.cn/?id=115

 

 

string  字符类  头文件<string>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
定义        字符串可以直接用<=、==等进行比较,并返回0或1   类似 strcmp ()
string  str
char  *cstr =  "bbbbb" ;  string str(cstr);
string str(10, '1' )  初始化为10个字符1
 
 
str.resize(len, ch)
str.length() 
 
str = str2                字符串复制    类似 strcpy ()
str.assign(cstr)          将C类字符串赋值给str
str.assign(cstr, 2)       将C类字符串的前n个字符赋值给str
str.assign(8,  'c' )        用8个字符c赋值给当前字符串 
str.assign(str2, 0, 3)    把字符串str2中从0开始的3个字符赋给当前字符串
 
str += str2               把str2连接到str的后面   类似 strcat ();
str.append(cstr)          将C类字符串str2连接到str的后面
str.append(cstr, 2)       将C类字符串str2的前n个字符连接到str的后面
str.push_back( 'k' )        把一个字符连接到str的结尾
 
str.replace(0, 3,  "abcd" )    删除从0开始的3个字符,然后在0处插入字符串 "abcd" 
str.replace(0, 3, str2, 2)   删除从0开始的3个字符,然后在0处插入字符串str2的前2个字符 
str.replace(0, 3,  "opqrstuvw" , 2, 4) 删除从0开始的3个字符,然后在0处插入字符串“opqrstuvw”从位置2开始的4个字符 
str.replace(0, 3, 8,  'c' )            删除从0开始的3个字符,然后在0处插入8个字符c 
对于插入,将replace改为insert,并将前两个参数改为1个,即插入的位置即可
 
str.find( 'i' , 0)          从第0个字符开始查找字符 'i' 并返回其下标,找不到返回-1
str.find( "name" , k)       从第k个字符开始查找字符串 "name" 并返回其下标,找不到返回-1
str.rfind( "name" , string::npos)  反向查找字符串 "name" 并返回其下标,找不到返回-1
 
reverse(str.begin(), str.end())  翻转字符串

 

stack 栈类  头文件<stack>

1
2
3
4
5
6
7
定义     先进来后出去
stack<type>sta
sta.empty()  查看是否为空范例,是的话返回1,不是返回0
sta.push(i)  在栈的最前面增加元素i(栈的大小不预设)
sta.pop()    清除第一个元素
sta.top()    显示第一个元素      例如n = k.top();
sta.size()   输出现有元素的个数

 

 

 

除特别注明外,本站所有文章均为whppmy原创,转载请注明出处来自http://www.dengwenhuo.cn/?id=385

转载于:https://www.cnblogs.com/liangmiao/p/6657471.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值