关于c++ STL知识总结


前言

最近,初学算法,通过阅读《算法训练营》一书,对c++ STL知识内容进行总结,由于这方面知识有很多,所以只做大致总结,总结了vector,stack,queue,list。初学者学术不精,希望看到的大佬多多提意见,码字不易点个赞吧。


1、STL简介

TL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。


2、容器通用函数

.size()  容器内的元素个数,无符号整型。

.empty() 判断容器是否为空,返回一个bool值。

.front() 返回容器第一个元素。

.back() 返回容器最后一个元素。

.begin() 指向容器第一个元素指针。

.end() 指向容器最后一个元素的下一个位置的指针

.swap(b) 交换两个容器的内容。

::iterator 迭代器。

关于迭代器:迭代器是一个广义的指针,可以是指针,也可以是对其进行类似指针操作的对象。C++的迭代器是为了使算法独立于所使用的容器类型而设计的,也就是说,C++的STL算法不会因为受使用的容器类型而限制。ps:也不会受数据类型的限制,因为STL提供了模板。关于迭代器的一个小技巧是:<xxxx>尖括号里是什么类型,解引用出来就是什么类型。


3、vector

vector(向量)是一个封装了动态大小数组的顺序容器,关于顺序容器他们的相关性就只有一种,就是前后相邻,可以通过元素在序列中的位置访问对应的元素,支持数组表示法和随机访问。使用vector需要引用头文件#include<vector>。


3.1创建

vector能够存放各种类型的对象,可以是c++标准数据类型,也可以是结构体类型。

vector<int>a;创建一个空的vector

vector<int>a(100) 创建一个元素个数为100的vector。

vector<int>a(20,100) 创建一个元素个数为20,初值都为100的vector。

vector<int>a[5] 创建五个vector每个都是一个数组。


3.2添加

向vector中添加元素,可以从尾部添加,也可以从中间添加。

a.push_back(5); 在向量尾部添加一个元素5

a.insert(a.begin()+1,10); 在向量a.begin()+1指向元素前插入一个10


3.3删除

可以删除尾部元素,也可以删除指定元素区间,还可以清空整个向量

a.pop_back(); 删除向量的最后一个元素。

a.erase(a.begin()+1); 删除指定位置的元素(传入两个参数就是删除指定区间的元素);

a.clear() 清空向量


3.4遍历

可以用数组表示法,也可以用迭代器对向量元素进行遍历

for(int i=0;i<a.size();i++)

cout<<a[i]<<"\t";

for(vector<int >::iterator it=a.begin();it<a.end();it++)

cout<<*it<<"\t";

3.5改变向量大小

对于vector由于是动态的,所以可以改变大小,其中改变大小并不是在原空间上进行改变,而是找更大的内存空间,然后将原来的数据拷贝到新的空间上,释放原空间。resize方法可以改变当前向量的大小,如果它比当前向量大,则填充默认值,如果必当前向量小,则舍弃后面的部分。

a.resize(5)  将原来的向量大小改为5.


4、栈 stack

栈只允许在栈顶操作,不允许在中间位置进行插入和删除操作,不支持数组表示法和随机访问。使用stack是需要引入头文件#include<stack> 。栈的基本操作很简单,包括入栈 ,出栈,去栈顶,判断栈空,求栈大小。

stack<int > s  :创建一个空栈s,数据类型int

push(x);    x入栈

pop(); 出栈

top()   取栈顶(未出栈

empty();  判断栈是否为空,若为空则返回TRUE。

size(); 求栈大小,返回栈中的元素个数。


5、队列 queue

队列只允许从队尾入队,从队头出队,不允许在中间位置插入和删除,不支持数组表示法和随机访问。使用queue是需要引入头文件#include<queue>。队伍的基本操作很简单,包括入队,出队,去对头,判断对空,求对列大小。

queue<int > q  创建一个空队q,数据类型int 

push(x)  x入队

pop()  出队

front()  去对头

empty()  判断队列是否为空,如为空,则返回TRUE

size()  求队列大小,返回队列中的元素个数


6、list

list是一个双向链表,可以在常数时间内插入和删除,不支持数组表示法和随机访问。使用list时,需要引入头文件#include<list>

list的专用成员函数

merge(b)  将链表b的内容插入pos的前面,b为空。

remove(val) 将链表翻转。

splice(pos,b) 将链表b的内容插入pos的前面,b为空。

reverse()  将链表翻转。

sort() 将链表排序。

unique()  将连续的相同元素压缩为单个元素。不连续的相同元素无法压缩,因此一般先排序后去重。

其他成员函数如下

push_front(x)/push)_back(x)  x从链表头或尾入。

pop_front()/pop_back()  从链表头或尾出。

front()/back() 返回链表头或尾元素。

insert(p,t)  在p之前插入t。

erase(p)  删除p。

clear()  清空链表。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值