常用STL容器归纳

常用STL容器归纳

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

vector容器

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

vector v1 v1 是一个元素类型为 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 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 
#include 
#include 
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 
#include 
#include 
#include 
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 
#include 
#include 
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(111, “kk”)); O(logN) 插入pair
m.insert(map:: 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 
#include 
 
 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、特殊方法

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

你可能感兴趣的:(c++,开发语言)