1.8 STL、位运算、常用库函数

 

 

1.vector

头文件#include <vector>

常见的方法有vector.clear() ; vector.size() ; vector.empty();

遍历输出vector:

#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<int> a({1,2,3,4});
    for(int i = 0 ; i < a.size() ; i++) cout<<a[i]<<" ";
    cout<<endl;
    
    for(vector<int>::iterator i = a.begin() ; i!=a.end() ; i++) cout<<*i<<" ";
    cout<<endl;
    
    for(auto i = a.begin() ; i!= a.end() ; i++) cout<<*i<<" ";
    cout<<endl;

  
for(int x : a) cout<<x<<" ";

   cout<<endl;


}

 a.front()调用第一个元素,a.back()调用最后一个元素

    vector<int> a({1,2,3,4});
    
    cout<<a.front()<<" "<<a[0]<<endl;
    
    cout<<a.back()<<" "<<a[a.size()-1] <<endl;

a.push_back()在vector后面添加一个元素,a.pop_back()删除最后一个元素

vector<int> a({1,2,3,4});

a.push_back(5);
for(auto i : a) cout<<i<<" ";
cout<<endl;

a.pop_back();
a.pop_back();
for(int x : a) cout<<x<<" ";
cout<<endl;

2.queue

结构体rec如果定义大根堆就要重载小于号,定义小根堆就要重载大于号。

 

 

 

普通队列:a.push() ; a.pop() ; a.front();  a.back() ; 

队列没有clear函数,要想清空重新定义就行,a = queue<int>;,重新把他定义一遍。

 

 

 大根堆:

 

 3.stack栈,#include <stack>。

push 向栈顶插入

pop 弹出栈顶元素

 

 4.双端队列deque;  #include <deque>

双端队列deque是一个支持在两端高效插入或删除元素的连续线性存储空间。它就像是vector和queue的结合。与vector相比,deque在头部增删元素仅需要O(1)的时间;与queue相比,deque像数组一样支持随机访问。

 

 a[0]是随机访问一个元素

 

 5.set   #include <set>

头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素。set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同

 

 

 

 

 

 

 

 

 

 

 set定义结构体也要重新定义大于小于号

 

还有一个unordered_set,  #include <unordered_set>

是无序的set , 所以除了upper_bound() 和 lower_bound() 之外,其他set的方法都有。

 

还有一个bitset;#include <bitset>

 

 

6.map   #include <map>

map容器是一个键值对key-value的映射,其内部实现是一棵以key为关键码的红黑树。Map的key和value可以是任意类型,其中key必须定义小于号运算符。

 

size/empty/clear/begin/end均与set类似。

 

 map中元素的类型可以自己定义,感觉是更好用的列表

 map.insert() 和 map.find() 用法:

 map还有一个unordered_map(), 所有操作都是O(1)的,但是C11才开始支持

#include <unordered_map>

posted @ 2021-11-10 18:20  乐池  阅读(58)  评论(0)    收藏  举报