Bootstrap

STL函数大全

目录

一、数组-vector

1.vertor的访问

2.vector的初始化

 3.函数

二、栈-stack

三、链表-list

1.初始化

2.函数

四、队列-queue

1.初始化

2.基本操作

3.priority_queue的初始化

4. priority_queue操作与链队列一致。

五、集合-set

1.初始化

2.基本操作

六、映射-map

1.初始化

2.操作函数


一、数组-vector

vector是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大缩小, 它提供了对元素的随机访问,在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的复杂度为线性时间。

1.vertor的访问

    //下标访问
	for(int i = 0;i<5;i++){
		cout<<v2[i]<<" ";
	}
	//迭代器访问
	for(vector<int>::iterator it = v2.begin();it!=v2.end();it++){
		cout<<*it<<' ';
	}

2.vector的初始化

    //一维vertor的初始化
	vector<int> v;
	vector<int> v1(v);
	vector<int> v2 = {1,2,3,4,5};
	
	//二维vertor的初始化
	vector<vector<int>> v3;

 3.函数

 v.capacity();  //容器容量

 v.size();      //容器大小

 v.at(int idx); //用法和[]运算符相同

 v.push_back(); //尾部插入

 v.pop_back();  //尾部删除

 v.front();     //获取头部元素

 v.back();      //获取尾部元素

 v.begin();     //头元素的迭代器

 v.end();       //尾部元素的迭代器

 v.insert(pos,elem); //pos是vector的插入元素的位置

 v.insert(pos, n, elem) //在位置pos上插入n个元素elem

 v.insert(pos, begin, end);

 v.erase(pos);   //移除pos位置上的元素,返回下一个数据的位置

 v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置

ps 其中的pos只能为容器的迭代器,不是我们常见数组的下标。

二、栈-stack

stack容器比较简单,没有迭代器,因为他只能在栈入和出

//初始化
stack<int> s;

//函数
push()
pop()
top()//返回栈顶元素
empty() 栈堆判空
size() 

三、链表-list

List是stl实现的双向链表,与vector相比, 它允许快速的插入和删除,但是随机访问却比较慢

1.初始化


​        list<int> a{1,2,3};
​        list<int> a(n); //声明n个元素的链表,每个元素都是0
​        list<int> a(n,m) //声明n个元素的链表,每个元素都是m
​        list<int> a(first,last) //用另外一个链表的区间给a赋值,first和last为迭代器
​        a.assign(n,m); //将a中所有元素替换成n个m

2.函数

        //返回头尾部元素
​        a.back();
​        a.front();

​        //插入元素
​        a.push_back(12); //在尾部插入一个元素
​        a.push_front(2); //在头部插入一个元素
​        //指定位置插入元素
​        a.insert(it,100); 
​        a.insert(it,2,100); //在it位置插入俩个元素
​        a.insert(it,first,last); //first和last为另外一个链表的迭代器 ,在it插入一个元素区间

​        //删除元素
​        a.pop_back();
​        a.pop_front();
​        a.erase(it);
​        a.erase(a.begin(),a.end());

​        //特殊用法
​        a.chear();//清空链表
​        swap(a,b);//交换俩个链表
​        a.swap(b);
​        reverse(a.begin(),a.end()); //逆置a链表
​        a.remove(n); //删除链表中所有n元素

四、队列-queue

    队列,简称对,是一种操作受限的线性表。特点为:只允许在队首删除(出队),队尾插入(入队),其特点是先进先出。在STL中,queue作为一种适配器,其底层容器一般为deque(双端队列)和list(双向链表),其中deque为默认底层容器。

1.初始化

        queue<int> q;
        queue<int> q[20] //规定队列元素数量
        queue<int,list<int>> q1;       //list<int>可以省略
        queue<int,list<int>> q2(q1);
        //复制构造函数(queue(const queue&)),用一个queue对象创建新的queue对象。 
        //利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2

2.基本操作

        q.push(x);      //入队,将元素 x 从队尾插入(尾插法)
        q.pop();        //出队,删除对首元素,并返回其值
        q.size();       //返回队中元素个数
        q.front();      //返回对首元素
        q.back();       //返回队尾元素
        q.empty();      //判断是否为空(空返回 1,非空返回 0)

优先队列(priority_queue)是一种会按照默认或自定义的优先级进行自动排序的队列,其特点是优先级高的元素排在队首,低的排在队尾。头文件#include< queue > 中提供了两种可直接引用的优先规则(排序规则):greater、less;其中,less是默认优先规则,表示数字大的优先级大(字符型用ASCLL码比较),放在队首;greater表示数字小的优先级大,放在队首。

3.priority_queue的初始化

        //优先队列
        priority_queue<int> pq; //默认声明
        priority_queue<int,vector<int>,less<int>> pq;
        priority_queue<int,vector<int>,greater<int>> pq;

4. priority_queue操作与链队列一致。

五、集合-set

关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。

1.初始化

set<int> s;

2.基本操作

insert(key)   //插入元素
inset(first,second) 

count()   //用来查找set中某个键值出现的次数 但是一个键值只能在set出现0和1次这样就变成了判断但某个值是否出现set中

erase(iterator) //删除迭代器指向的值
erase(first,second) //删除迭代器first和second之间的值
erase(key_value) //删除键值key——value

find(key)   //返回迭代器的值,没有找到返回end()

lower_bound(key) 返回第一个大于等于key的迭代器
upper_bound(key)返回最后一个大于等于key的迭代器

begin()     //返回set容器第一个元素的迭代器

end()     //返回一个指向当前set末尾元素的下一位置的迭代器.

clear()      //删除set容器中的所有的元素

empty()    //判断set容器是否为空

max_size()  //返回set容器可能包含的元素最大个数

size()     //返回当前set容器中的元素个数

rbegin()    //返回的值和end()相同

rend()     //返回的值和begin()相同

六、映射-map

自动建立key - value的对应。key 和 value可以是任意你需要的类型,包括自定义类型。

1.初始化

    可自行定义需要的映射
    模板为  map<key,value> name;
    列如:map<int,string> ma;   //整形到字符串的映射

2.操作函数

    插入
    m.insert(pair<int,string>(000,"student_zero");
    m.insert(map<int,string>::value_type(001,"student_one"));
    m[123] = "student_first";
    m[456] = "student_second";
    查找
    m.find(key)
    删除与清空元素
    m.erase(key)
    m.erase(m.begin(),m.end())
    大小
    m.size()

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;