C++中STL常见用法总结

一、什么是STL?

(Standard Template Library,STL)标准模板库,所谓模板,是指不必预先制定类型的函数或类。可以借助STL提供的高效算法来管理数据。STL中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像容器(container),算法(algorithmn),迭代子(iterator)等。

二、STL内容介绍

  1. 容器(Container),是一种数据结构,如list,vector,和deques,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
  2. 迭代器(Iterator),提供了访问容器中对象的方法,类似于指针进行操作。
  3. 算法(Algorithm),是用来操作容器中的数据的模板函数。例如用sort()来对一个vector中的数据进行排序,也可以对数据进行排序。
  4. 仿函数(Function object)
  5. 迭代适配器(Adaptor)
  6. 空间配制器(allocator)

2.1容器

STL中的容器有队列容器和关联容器,容器适配器(congtainer adapters:stack,queue,priority queue),位集(bit_set),串包(string_package)等等。

1、序列容器,每个元素都有固定位置,如vector、deque、list等:

(1)Vectors:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;
(2)Deques:是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时;
(3)Lists:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;

2、关联式容器,如set、multiset、map、multimap等;

(1)Sets/Multisets:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现,便于查找;
(2)Maps/Multimaps:Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现,便于查找;

2.2常见容器的基本使用

1、vector的成员函数示例及使用

函数名功能复杂度
size( )返回向量的元素数O(1)
push_back(x)在向量末尾添加元素xO(1)
pop_back( )删除向量的最后一个元素O(1)
begin( )返回指向向量开头的迭代器O(1)
end( )返回指向向量末尾的迭代器O(1)
insert(p, x)在向量的位置p处插入元素xO(n)
erase( p )删除向量中位置p的元素O(n)
clear( )删除向量中所有元素O(n)

2、list的成员函数实例及使用

函数名功能复杂度
size( )返回表的元素数O(1)
push_front(x)在表的开头添加元素xO(1)
push_back(x)在表的末尾添加元素xO(1)
pop_front( )删除位于表开头的元素O(1)
pop_back( )删除位于表末尾元素O(1)
begin( )返回指向表开头的迭代器O(1)
end( )返回指向表末尾的迭代器O(1)
insert(p, x)在表的位置p处插入元素xO(1)
erase( p )删除表中位置p的元素O(1)
clear( )删除表中所有元素O(n)

3、queue的成员函数实例及使用

函数名功能复杂度
size( )返回队列的元素数O(1)
front( )返回队头的元素O(1)
pop( )从队列中取出并删除元素O(1)
push(x)向队列中添加元素xO(1)
empty( )在队列为空时返回trueO(1)

4、stack的成员函数实例及使用

函数名功能复杂度
size( )返回栈的元素数O(1)
top( )返回栈顶的元素O(1)
pop( )从栈中取出并删除元素O(1)
push(x)向栈中添加元素xO(1)
empty( )在栈为空时返回trueO(1)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值