关于c++ STL知识总结

文章目录

  • 目录

    文章目录

    前言

    1、STL简介

    2、容器通用函数

    3、vector

    3.1创建

    3.2添加

    3.3删除

    3.4遍历

    3.5改变向量大小

    4、栈 stack

    5、队列 queue

    6、list

    总结



前言

最近,初学算法,通过阅读《算法训练营》一书,对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提供了模板。关于迭代器的一个小技巧是:尖括号里是什么类型,解引用出来就是什么类型。


3、vector

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


3.1创建

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

vectora;创建一个空的vector

vectora(100) 创建一个元素个数为100的vector。

vectora(20,100) 创建一个元素个数为20,初值都为100的vector。

vectora[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

cout<

for(vector::iterator it=a.begin();it

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

3.5改变向量大小

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

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


4、栈 stack

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

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

push(x);    x入栈

pop(); 出栈

top()   取栈顶(未出栈

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

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


5、队列 queue

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

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

push(x)  x入队

pop()  出队

front()  去对头

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

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


6、list

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

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()  清空链表。


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