常用STL容器归纳

常用STL容器归纳

更加优秀的阅读方式链接,如果没有梯子,可能有点慢,请耐心等待哦~

vector容器

1、对象的定义和初始化方式

vector v1v1 是一个元素类型为 T 的空 vector
vector v2(v1)使用 v2 中所有元素初始化 v1
vector v2 = v1同上
vector v3(n, val)v3 中包含了 n 个值为 val 的元素
vector v4(n)v3 中包含了 n 个默认值初始化的元素
vector v5{a, b, c…}使用 a, b, c… 初始化 v5
vector v1同上
vector<vector> matrix(M,vector(N));二维数组初始化

2、常用基础操作

操作指令时间复杂度作用
v.empty()O(1)如果 v 为空则返回 true,否则返回 false
v.size()O(1)返回 v 中元素的个数
v.push_back(val)O(1)向 vector 的尾端添加值为 val 的元素。
v.pop_back()O(1)删除尾元素,返回void。vector同样 不支持 pop_front 操作。若想在同时弹出元素的值,就必须在执行弹出之前保存它(可以使用 v.back())。
v.back()O(1)返回 v 中最后一个元素的引用
v.front()O(1)返回 v 中第一个元素的引用

1、消除相邻的重复元素 unique()

使用到的函数为 unique() :将输入序列相邻的重复项“消除”,返回一个指向不重复值范围末尾的迭代器,一般配合 sort() 使用,函数原型:

举例:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main(void)
{
    vector<int> a{2, 0, 2, 2, 0, 3, 0, 9};
    sort(a.begin(), a.end());  // 先排序
    for(int i:a)   cout << i << " "; // 输出
    cout << endl;
    auto end_unique = unique(a.begin(), a.end());  //将输入序列相邻的重复项“消除”,返回一个指向不重复值范围末尾的迭代器
    a.erase(end_unique, a.end()); // 删除末尾元素
    for(int i:a)   cout << i << " "; // 输出
    return 0;
}
// 运行结果 //
0 0 0 2 2 2 3 9 
0 2 3 9

3、特殊方法

1、逆序 reverse()

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
int main(void)
{
    vector<int> a{2, 0, 2, 2, 0, 3, 0, 9};
    reverse(a.begin(), a.end());  // 原位逆序排列
    for(int i:a)   cout << i << " "; // 输出
    return 0;
}
// 运行结果 //
9 0 3 0 2 2 0 2 

2、vector 中找最值

1、最大值 auto it = max_element(v.begin, v,end()),返回最大值的迭代器。

2、最小值 auto it = min_element(v.begin, v,end()),返回最小值的迭代器。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main(void)
{
    vector<int> a({0,1,-2,3});
    auto b = distance(a.begin(), min_element(a.begin(), a.end()));
    cout << a[b] << endl;
    return 0;
}
// 输出 //
-2

如果不确定元素的确定个数,那么 vector 就是最好的选择。

map容器

1、对象的定义和初始化方式

map<T,T> m;

2、常用基础操作

操作指令时间复杂度作用
m.insert(pair<T, T>(111, “kk”));O(logN)插入pair
m.insert(map<T,T>:: value_type(val1, val2));O(logN)插入value_type数据
m[123] = “dd”O(logN)数组方式插入
m.find(key)O(logN)返回键是key的映射的迭代器
m.clear()O(logN)清空
m.erase()O(logN)删除一个元素

3、特殊方法

。。。。。。。。。装修中(´;ω;)

set容器

1、对象的定义和初始化方式

set<T> s;

2、常用基础操作

操作指令时间复杂度作用
s.begin()O(1)返回set容器的第一个元素迭代器
s.end()O(1)返回set容器的最后一个元素迭代器
s.clear()O(logN)清空
s.empty()O(1)判断set容器是否为空
s.earse()O(logN)删除一个元素
s.size()O(1)返回当前set容器中的元素个数

3、特殊方法

1、equal_range()

返回一对定位器,分别表示第一个大于或等于给定关键值的元素和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。

#include <iostream>
#include <set>
 
 using namespace std;
 
 int main()
 {
     set<int> s;
     set<int>::iterator iter;
     for(int i = 1 ; i <= 5; ++i)
     {
         s.insert(i);
     }
     for(iter = s.begin() ; iter != s.end() ; ++iter)
     {
         cout<<*iter<<" ";
     }
     cout<<endl;
     pair<set<int>::const_iterator,set<int>::const_iterator> pr;
     pr = s.equal_range(3);
     cout<<"第一个大于等于 3 的数是 :"<<*pr.first<<endl;
     cout<<"第一个大于 3的数是 : "<<*pr.second<<endl;
     return 0;
 }

2、erase(first,second)

删除定位器first和second之间的值

set<T>::const_iterator iter1;
set<T>::const_iterator iter2;
earse(iter1, iter2)

multiset容器

multiset是库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。

1、对象的定义和初始化方式

multiset<rec> s;

2、常用基础操作

操作指令时间复杂度作用
s.begin()O(1)返回set容器的第一个元素迭代器
s.end()O(1)返回set容器的最后一个元素迭代器
c.insert(val)O(logN)插入一个val副本,返回新元素位置,无论插入成功与否。
c.insert(pos, val)O(logN)安插一个val元素副本,返回新元素位置,pos为收索起点,提升插入速度。
s.earse()O(logN)删除一个元素
s.size()O(1)返回当前set容器中的元素个数

3、特殊方法

。。。。。。。。。装修中(´;ω;)

queue容器

1、对象的定义和初始化方式

queue<T> q;

2、常用基础操作

操作指令时间复杂度作用
q.push()O(1)在队尾插入一个元素
q.pop()O(1)删除队列第一个元素
q.front()O(1)返回队列中的第一个元素
q.empty()O(1)如果队列空则返回true
q.back()O(1)返回队列中最后一个元素
q.size()O(1)返回队列中元素个数

3、特殊方法

。。。。。。。。。装修中(´;ω;)

priority_queue容器

1、对象的定义和初始化方式

priority_queue<T> q;

2、常用基础操作

操作指令时间复杂度作用
q.push()O(logN)在队尾插入一个元素
q.pop()O(logN)删除队列第一个元素
q.top()O(1)返回队列中的第一个元素
q.empty()O(1)如果队列空则返回true
q.emplace()O(logN)原地构造一个元素并插入队列
q.size()O(1)返回队列中元素个数

3、特殊方法

。。。。。。。。。装修中(´;ω;)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值