STL模板库

STL模板库

STL是Standard Template Library缩写,中文名字叫标准库模板,由惠普实验室提供,共有三类内容:

算法:以函数模板形式实现的常用算法,如:max、min、swap、find、sort

容器:以类模板形式实现的常用数据结构,如:栈、队列、链式表、顺序表、红黑树

迭代器:它是容器的成员,用于帮助访问容器中的元素,使用方法类似于指针

find

#include <algorithm>
iterator find( iterator start, iterator end, const TYPE& val );
功能:顺序查找
start:第一个元素的指针或迭代器(将链式结构封装成顺序表)
end:最后一个元素的下一个位置
val:待查找的关键数据
返回值:
	找到[start,end) 范围的指针或迭代器
	找不到返回end

sort

#include <algorithm>
void sort( iterator start, iterator end ); //普通类型
void sort( iterator start, iterator end, StrictWeakOrdering cmp );
功能:快速排序
start:第一个元素的指针或迭代器
end:最后一个元素的下一个位置
cmp:
	bool cmp(T a,T b)
	{
		return a>b;
	}

vector向量容器

头文件:vector

采用顺序结构的内存存储数据,可以通过下标随机访问,因此也被称为数组容器

定义向量容器对象时,不需要设置数组长度,它会随着元素添加(push_back)自动扩展内存,每次扩展一倍

构造函数:
vector( const vector& c );

vector( **size_type** num, const TYPE& val = TYPE() );
num:数组长度
val:初始化数据

vector( input_iterator start, input_iterator end );
功能:使用一组数据初始化数组
start:第一个元素
end:最后一个元素的下一个位置
支持的运算符:

==、!=

<=、>=、<、> 按照字符串的比较规则进行比较的

[] 下标 >= sizeof() 就会出现段错误,数组不会随着访问而扩展内存,而是添加元素才扩展

常用的成员函数:
void assign( size_type num, const TYPE& val );
功能:给数组的前num个元素赋值为val

void assign( input_iterator start, input_iterator end );
功能:使用一组数据给数组赋值

TYPE at(size_type loc);
功能:访问数组成员,功能相当于[],当loc越界时,at函数会抛出异常,而[]越界时可能出现段错误、脏数据、一切正常

TYPE back();
功能:返回数组中的最后一个元素
    
TYPE front();
功能:返回数组中的第一个元素

iterator begin();
const_iterator begin() const;
功能:返回指向第一个元素的迭代器

iterator end();
const_iterator end() const;
功能:返回指向最后一个元素下一个位置的迭代器
注意:迭代器对于vector的用处不大,但对于其他容器,迭代器是唯一的遍历方式
vector<int>::iterator it
for(it=arr.begin(); it!=arr.end(); it++)c++
{
	cout << *it << endl;
}

size_type capacity() const;
功能:获取数组的容量

void clear();
功能:清空数组中所有元素,容量不变,元素数量变为0
 
iterator erase(iterator loc);
功能:删除一个元素
    
iterator erase(iterator start, iterator end);
功能:删除一部分元素
注意:删除元素时必须使用迭代器
    
iterator insert(iterator loc, const TYPE& val);
功能:在某个元素之前插入一个元素,位置以迭代器的形式提供

void insert(iterator loc, size_type num, const TYPE& val);
功能:在某个元素之前插入num个元素,位置以迭代器的形式提供

void insert(iterator loc, input_iterator start, input_iterator end);
功能:在某个元素之前插入一组元素,位置以迭代器的形式提供

size_type max_size() const;
功能:用于计算数组能存储的最大元素数量,因为数组的内存扩张是有限度的 4294907295,由元素类型决定

void pop_back();
功能:删除最后一个元素

void push_back(const TYPE &val);
功能:末尾添加一个元素,当数组内存不够会扩充一倍内存

reverse_iterator rbegin();
功能:返回一个逆向迭代器,它指向最后一个元素

reverse_iterator rend();
功能:返回一个逆向迭代器,它指向第一个元素前一个位置

void reserve(size_type size);
功能:修改数组的容量,只能往大了改

void resize(size_type num, const TYPE& val = TYPE());
功能:修改数组元素数量
可以往小改,相当于删除元素
也可以往大改,相当于增加元素 值是val

void swap(container& from);
功能:交换两个数组的元素

list容器

头文件:list

是一个功能齐全的双向链表

运算符函数:

= = !=
< > < >=

构造函数:
list();
list(const list& c);
list(size_type num, const TYPE& val = TYPE());
list(input_iterator start, input_iterator end);
常用的成员函数:
void assign(size_type num, const TYPE& val);
功能:向链表中插入num个元素,并赋值为val

void assign(input_iterator start, input_iterator end);
功能:向链表中插入一组数据
 
iterator begin();
const_iterator begin() const;
功能:返回一个正向迭代器,指向链表中的第一个元素。

iterator end();
const_iterator end() const;
功能:返回一个正向迭代器,指向链表中的最后一个元素下一个位置。

TYPE& back();
const TYPE& back() const;
功能:返回链表中最后一个元素

TYPE& front();
const TYPE& front() const;
功能:返回链表中第一个元素

iterator erase( iterator loc );
功能:删除链表中的某个位置元素,位置以迭代器方式提供

iterator erase( iterator start, iterator end );
功能:删除链表中的某个范围的元素,范围以迭代器方式提供

iterator insert( iterator loc, const TYPE& val );
功能:向链表中的指定位置插入一个val元素,位置以迭代器方式提供

void insert( iterator loc, size_type num, const TYPE& val );
功能:向链表中的指定位置插入num个val元素,位置以迭代器方式提供

template<TYPE> void insert( iterator loc, input_iterator start,
input_iterator end );
功能:向链表中的指定位置插入一组数据,位置以迭代器方式提供

size_type max_size() const;
功能:获取链表的最大长度

void merge( list &lst );
void merge( list &lst, BinPred compfunction );
功能:合并两个链表,结果为有序链表,如果两个链表是有序,结果依然有有序,lst链表则删除所有元素。
注意:如果链表中的元素不支持<运算符,则需要提供比较函数。

void pop_back();
功能:尾删除

void pop_front();
功能:头删除
    
void push_back( const TYPE& val );
功能:尾添加

void push_front( const TYPE& val );
功能:头添加

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
功能:返回一个逆向迭代器,指向最后一个元素

reverse_iterator rend();
const_reverse_iterator rend() const;
功能:返回一个逆向迭代器,指向第一个元素的前一个位置

void remove( const TYPE &val );
功能:删除链表中所有等于val的元素

void remove_if( UnPred pr );
功能:删除符合条件的元素
pr:
    bool if_func(const TYPE& val)
    {
         return left < val && val < right; 
    }

size_type size() const;
功能:获取链表元素的数量

void sort();
功能:对当前链表进行排序,需要元素支持 < 运算符

void sort( BinPred p );
功能:对当前链表进行排序,元素不支持 < 运算符,需要调用者提供比较函数。
BinPred:
        bool cmp(T a,T b)
        {
            return a<b;
        }

void splice( iterator pos, list& lst );
功能:把链表lst合并到当前链表的指定位置,位置以迭代器方式提供,lst链表则删除所有元素。

void splice( iterator pos, list& lst, iterator del );
功能:把链表lst指定位置的元素合并到当前链表的指定位置,lst中的del位置元素会被删除。

void splice( iterator pos, list& lst, iterator start, iterator end );
功能:把链表lst指定范围的元素合并到当前链表的指定位置,lst中的[start,end)范围的元素会被删除。

void swap( container& from );
功能:交换两个链表

void unique();
功能:删除重复的元素

void unique( BinPred pr );
功能:删除符合条件的重复元素

deque容器:

​ 头文件:#include < deque>

​ 双端队列容器,依靠采用队列的管理规则只能两端进出数据,与普通队列不同的是,它的两端都可以进出

​ 其实就是在向量的基础上增加了两端管理的功能。

构造函数:
deque( size_type size );
功能:创建一个大小为size的双向队列 

deque( size_type num, const TYPE &val );
功能:创建一个双向对象并放置num个值为val的元素

deque( input_iterator start, input_iterator end );
功能:使用一组数据构造一个双向队列
支持的运算符:

[] 既可以访问元素也可以赋值
=、==、!=、<、>、<=、>= 与链表、数组的比较无则相同

常用成员函数:
void assign( input_iterator start, input_iterator end);
功能:使用一组数据给双向队列赋值

void assign( Size num, const TYPE &val );
功能:给队列中的前n个元素赋值为val,并删除后面的元素

TYPE& at( size_type loc );
const TYPE& at( size_type loc ) const;
功能:访问队列中的元素,与[]运算符的功能一样,当下标越界时,at会抛出异常,而[]会可能会产生段错误、脏数据、一切正常。

TYPE& back();
const TYPE& back() const;
功能:获取队尾元素

TYPE& front();
const TYPE& front() const;
功能:获取队头

iterator begin();
const_iterator begin() const;
功能:返回一个正常迭代器,指向第一个元素
iterator end();
const_iterator end() const;
功能:返回一个正常迭代器,指向最后一个元素的下一个位置

void clear();
功能:清空所有元素

bool empty() const;
功能:判断队列是否为空

iterator erase( iterator loc );
功能:删除一个元素
iterator erase( iterator start, iterator end );
功能:删除一个范围的元素

iterator insert( iterator loc, const TYPE& val );
功能:在指定的位置插入一个val元素

void insert( iterator loc, size_type num, const TYPE& val );
功能:在指定的位置插入num个值为val的元素

template<TYPE> void insert( iterator loc, input_iterator start,
input_iterator end );
功能:在指定的位置插入一组元素
size_type max_size() const;
功能:计算出能存储的最多元素数量,原理与vector一样

void pop_back();
功能:从队尾弹出一个元素
void pop_front();
功能:从队头弹出一个元素

void push_back( const TYPE& val );
功能:从队尾入队
void push_front( const TYPE& val );
功能:从队头入队

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
功能:返回一个逆向迭代器,指向最后一个元素

reverse_iterator rend();
const_reverse_iterator rend() const;
功能:返回一个逆向迭代器,指向第一个元素的前一个位置

void resize( size_type size, TYPE val );
功能:修改队列的元素数量
    可以往大了改,相当增加元素 值是val
    也可以往小了改,相当于删除元素

size_type size() const;
功能:获取队列元素的数量

void swap( container& from );
功能:交换两个队列中的元素

priority_queue容器:

​ 头文件:#include < queue>
​ 优先队列,该队列会对入队的数据进行排序,元素越大越先出队。
​ 注意:存储的元素应支持<运算符。

bool empty() const;
功能:判断队列是否为空

void pop();
功能:出队,按排序后的顺序,大的元素优先出队

void push( const TYPE& val );
功能:入队,入队后的元素会自动进行排序

size_type size() const;
功能:获取队列中元素的数量

TYPE& top();
功能:获取队头元素,队列中最大的元素

set容器:

​ 头文件:#include < set>
​ 集合容器,特点是元素不能重复,会对元素自动排序,因此它存储的元素必须支持<运算符,只能使用迭代器遍历。

构造函数:

只有无参构造和拷贝构造。

支持的运算符:与list容器一样。

成员函数:
iterator begin();
const_iterator begin() const;
功能:返回一个正常迭代器,指向第一个元素

iterator end();
const_iterator end() const;
功能:返回一个正常迭代器,指向最后一个元素的下一个位置

void clear();
功能:清空所有元素

bool empty() const;
功能:判断队列是否为空

iterator erase( iterator loc );
功能:删除一个元素
iterator erase( iterator start, iterator end );
功能:删除一个范围的元素

size_type count( const key_type& key );
功能:获取集合中key元素的数量,结果只能是0或1,可用于判断key是否存在,在此容器中无意义。

iterator find( const key_type& key );
功能:查找在集合中查找值为key的元素,并返回指向该元素的迭代器,如果集合中没有key则返回end()的值。

pair<iterator, iterator> equal_range( const key_type& key );
功能:查找集合中值为key的元素,并返回一个迭代器范围[start,end),在此容器无意义。

void insert( input_iterator start, input_iterator end );
功能:向集合中添加一组元素
pair<iterator,bool> insert( const TYPE& val );
功能:向集合中插入一组元素

key_compare key_comp() const;
功能:返回一个用于比较元素的函数对象。
bool cmp(T& a,T& b)
{
    return !(a<b) && !(b<a);
}

value_compare value_comp() const;
功能:在该容器中它与key_comp的功能一模一样。

iterator lower_bound( const key_type& key );
功能:返回一个大于等于key值的元素的迭代器(最小的)
iterator upper_bound( const key_type& key );
功能:返回一个小于等于key值的元素的迭代器(最大的)

reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
功能:返回一个逆向迭代器,指向最后一个元素
reverse_iterator rend();
const_reverse_iterator rend() const;
功能:返回一个逆向迭代器,指向第一个元素的前一个位置

size_type max_size() const;
功能:计算出能存储的最多元素数量,原理与vector一样

void swap( container& from );
功能:交换两个集合中的元素
multiset容器:

​ 头文件:#include < set>
​ 多重集合容器,特点是元素可以重复,会对元素自动排序,因此它存储的元素必须支持<运算符,只能使用迭代器遍历。

size_type count( const key_type& key );
功能:计算值为key的元素的数量,此该容器变的有意义。

pair<iterator, iterator> equal_range( const key_type& key );
功能:查找集合中值为key的元素,并返回一个迭代器范围[start,end),此该容器变的有意义。
map容器

​ 头文件:#include < map>
​ 映射容器,是由key/value组成的元素(字典),要求key不能有重复,会根据key进行排序,所以key必须支持<运算符。

key和value一一对应,可以根据key(相当于下标)访问value,底层采用红黑树存储数据,因此查找效率极高。

构造函数:
map( iterator start, iterator end);
功能:使用一组数据(pair类型)构造映射容器
map( iterator start, iterator end, const key_compare& cmp );
功能:使用一组数据(pair类型)构造映射容器,并提供key的比较函数。
map(const key_compare& cmp);
功能:构造映射容器,并提供key的比较函数。

支持的运算符:
    [] 使用key值作为下标
    既可以用来访问,也可以用来赋值(插入数据)。

iterator insert( iterator i, const TYPE& pair );
功能:在指定的位置插入一对键值

void insert( input_iterator start, input_iterator end );
功能:几映入容器中插入一组数据(pair类型)

pair<iterator,bool> insert( const TYPE& pair );
功能:插入一对键值,并返回插入的结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一份讲解全面的标准模板STL学习资料 标准模板STL主要由6大组件组成: (1)容器(Containers)。包括各种基本数据结构的类模板STL容器部分主要由头文件<vector>、<list>、<deque>、<set>、< map>、<stack>和<queue>组成。 (2)算法(Algorithms)。包括各种基本算法,如比较、交换、查找、排序、遍历操作、复制、修改、移除、反转、合并等等。 STL算法部分主要由头文件<algorithm>和<numeric>组成。 (3)迭代器(Iterators)。迭代器是面向对象版本的指针,如同指针可以指向内存中的一个地址,迭代器可以指向容器中的一个位置。 STL的每一个容器类模板中,都定义了一组对应的迭代器类,用以存取容器中的元素。这样,在STL中迭代器就将算法和容器联系起来了,通过迭代器,算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。 STL迭代器部分主要由头文件<utility>和<iterator>组成。 (4)函数对象(Function Objects)。一种行为类似于函数的class,实现技术上是一个改写了“call operator()”的class。 STL 提供 15 个预定义的 Function objects。头文件<functional>中定义了一些类模板,用以声明函数对象。 (5)适配器(Adaptors)。简单地说就是一种接口类,专门用来修改现有类的接口,提供一种新的接口;或调用现有的函数来实现所需要的功能。 主要包括3种适配器Container Adaptors、Iterator Adaptors与Function Adaptors。其中迭代器适配器的定义在头文件<iterator>中,函数适配器的定义在头文件<functional>中。 (6)内存配置器(Allocators)。为STL提供空间配置的系统。 头文件<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。容器使用allocator完成对内存的操作,allocator提供内存原语以对内存进行统一的存取。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值