STL标准模板库

STL标准模板库

STL是Standard Template Library缩写,中文名叫做标准模板库。由惠普实验室提供的(使用了C++的模板语言封装的常用的数据结构和算法),里面共有三大类内容:
算法:以函数模板形式实现的常用算法,例如:swap、max、min、find、sort
容器:以类模板形式实现了常用的数据结构,例如:栈、队列、链式表、顺序表、红黑树
迭代器:它是容器的成员,用于帮助访问容器中的元素,使用方法类似于指针

常用的算法函数:
#include
iterator find(iterator start,iterator end,const TYPE& val);
功能:顺序查找
start:指向第一个元素的指针或者迭代器
end:指向最后一元素的下一个位置的指针或迭代器
val:待查找的关键数据
返回值:
在[start,end)范围内找到了val,返回该val的指针或迭代器
找不到返回end

void sort( iterator start, iterator end );
void sort( iterator start, iterator end,    StrictWeakOrdering cmp );
功能:快速排序
start:指向第一个元素的指针或者迭代器
end:指向最后一元素的下一个位置的指针或迭代器
注意:排序的元素需要支持 < 运算符,否则要在后面提供比较的回调函数参数,格式如下:
cmp:
bool cmp(const T& a,const T& b)
{
    return a > b;   
}

vector向量容器:
头文件:#include
采用顺序结构存储数据,可以通过下标随机访问元素,因此也称为数组容器
构造函数:
vector( size_type num, const TYPE& val = TYPE() );
num:数组的长度
val:用于初始化所有元素,不给默认为0

vector( input_iterator start, input_iterator end );
功能:通过使用一组数据进行初始化向量容器
start:数据的第一个元素
end:最后一个元素的下一个位置

支持的运算符函数:
    ==  !=  <=  >=  <  > 会对容器进行整体比较,根据字符串的比较规则进行比较(一个个元素按照字典序比较,一旦比较出结果就结束)
    [] 让向量可以当做数组使用,一样不检查下标是否合法,当下标 >= size() 可能会出现段错误,向量不会随着访问而扩容,而是通过添加元素才会自动扩容

常用的成员函数:
void assign( size_type num, const TYPE& val );
功能:使用一组值为val的数据给向量赋值

void assign(input_iterator start,input_iterator end );
功能:使用一组范围[start,end)的数据给向量赋值
注意:赋值函数让向量原数据被覆盖,且数量会自动增加或减少

TYPE& at( size_type loc );
const TYPE& at( size_type loc ) const
功能:访问下标为loc的元素,相当于[],当loc越界时at函数一定会抛出异常,但是[]越界可能段错误、脏数据、一切正常

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

iterator begin();
功能:返回指向第一个元素的迭代器
iterator end();
功能:返回指向最后一个元素的下一个位置的迭代器
for(vector<int>::iterator it=v.begin();it!=v.end();it++)    
{
    cout << *it << endl;
}

size_type capacity() const;
功能:获取向量的容量,容量是可以随着向量的动态变化
size_type size() const;
功能:获取向量的现有的元素数量
void clear();
功能:清空向量中的所有元素,但是容量不变,数量清零
bool empty() const;
功能:判断向量元素是否为空,空返回真

iterator erase( iterator loc );
功能:删除一个元素
iterator erase( iterator start, iterator end );
功能:删除范围[start,end)的元素
注意:
    1、参数必须提供迭代器
    2、删除只是删除元素,容量不变

iterator insert( iterator loc, const TYPE& val );
功能:在某个元素之前插入值为val的元素,位置必须以迭代器形式提供
void insert(iterator loc,size_type num,const TYPE& val);
功能:在某个元素之前插入num个值为val的元素,位置必须以迭代器形式提供
void insert(iterator loc, input_iterator start, input_iterator end );
功能:在某个元素之前插入一组[start,end)数据,位置必须以迭代器形式提供

size_type max_size() const;
功能:计算出向量中最多能存储的元素个数,该结果与向量存储的元素类型以及计算机内存大小相关

void pop_back();
功能:删除最后一个元素
void push_back( const TYPE& val );
功能:在末尾添加一个元素,可能会导致向量容量不足,则会自动进行原容量翻倍的扩容

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

void reserve( size_type size );
功能:修改向量的容量
注意:只能修改后比原容量大

void resize( size_type num, const TYPE& val =TYPE() );
功能:修改向量的元素数量
注意:
    1、可以往大了改,就会在末尾添加num个值为val的元素,且容量变为num
    2、可以往小了该,相当于删除元素,容量不变

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

list容器:
头文件:#include
是一个功能齐全的双向链表

list( size_type num, const TYPE& val = TYPE() );
功能:创建num个元素,初始值为val的链表,不给默认为0
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();
功能:返回链表中的最后一个元素
TYPE& front();
功能:返回链表中的第一个元素

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

iterator erase( iterator loc );
功能:删除链表中指定位置的元素,以迭代器形式提供位置
iterator erase( iterator start, iterator end );
功能:删除链表中[start,end)范围的元素,以迭代器形式提供位置

注意:链表的迭代器不允许使用 it+n it+=n这种语法,因为不支持随机访问

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 );
功能:向链表中指定位置,插入一组元素,位置以迭代器形式提供

void merge( list &lst );
功能:按照顺序合并两个链表
void merge( list &lst, BinPred compfunction );
功能:合并两个链表,如果不支持<运算符,需要提供比较函数

注意:想要合并后有序,合并前也必须各自有序,需要先各自排序后才能有序合并,合并后lst的元素会删除
注意:链表中的数据要支持 < 运算符才能排序

void sort();
void sort( BinPred p );
功能:对链表中的元素进行快速排序,需要支持 < 运算符才行,否则需要提供比较函数

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 T& num)
    {   
    return num < 50;//条件满足返回真,则会被删除
    }

void resize( size_type num, const TYPE& val =TYPE() );
功能:修改链表中的元素数量为num
    可以往大了改,相当于尾增加值为val的元素
    可以往小了改,相当于尾删除

void reverse();
功能:反转链表

void splice( iterator pos, list& lst );
功能:把链表lst合并到当前链表的指定位置中,位置以迭代器形式提供,lst会删除所有元素
void splice( iterator pos, list& lst, iterator del );
功能:把链表lst指定del位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除del位置开始的元素
void splice(iterator pos, list& lst, iterator start, iterator end );
功能:把链表lst指定[start,end)位置的元素合并到当前链表的指定pos位置中,位置以迭代器形式提供,lst会删除[start,end)位置的元素

void unique();
功能:删除重复元素,只保留一个
void unique( BinPred pr );
功能:删除重复元素,但元素类型必须支持 == 运算符,否则需要提供比较函数 pr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一份讲解全面的标准模板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提供内存原语以对内存进行统一的存取。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值