C++ 标准模板库(STL)学习总结
C++标准模板库(STL)
顺序性容器
1.C++ Vector(向量容器)
vector提供如下函数或操作:
clear() 移除容器中所有数据
empty() 判断容器是否为空
erase(pos) 删除pos位置的数据
erase(beg,end) 删除[beg,end)区间的数据
front() 传回第一个数据
back()返回vector中末尾元素的引用
data()返回指向vector内存的指针
insert(pos,elem) 在pos位置插入一个elem拷贝
pop_back() 删除最后一个数据
push_back(elem) 在尾部加入一个数据
resize(num) 重新设置该容器的大小
size() 返回容器中实际数据的个数
max_size()函数返回vector能够容纳的最大元素个数
begin() 返回指向容器第一个元素的迭代器
end() 返回指向容器最后一个元素的迭代器
capacity()返回vector中实际分配的内存大小
reverse()改变vector的容量大小,当vector的容量设定时,vector的容
量不会因此动态分配
operator[ ]()获取vector中元素,这个和C中获取数组元素一样
at()获取vector中的元素,这个和[]的作用一样,不过和[]不同的是,at()函数要对数组的边界进行检查,如果越界就会抛出异常,但是[]不会。
2.C++ List(链表)
Lists将元素按顺序储存在链表中. 与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
assign() 给list赋值
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素
3.C++ deque(双向队列)
容器deque和vector非常相似,操作函数基本一致。它采用动态数组来管理元素,提供随机存取,可以在头尾两端进行快速安插和删除元素操作。特别要注意,除了头尾两端,在任何地方安插与删除元素,都将导致指向deque元素的任何pointers references iterators 失效。
包括的头文件为:
#include
using namespace std;
声明一个deque时,一般需要前缀std:: ,如std::deque
因为类型deque是一个定义在namespace std内的template 。
构造函数:
deque
deque
deque
deque
//每个元素值都是elem。
dequer
//做为元素初值
析构函数:
c.~ deque
非变动性操作
c.size(); //返回当前的元素数量
c.empty(); //判断大小是否为零。等同于c.size() == 0,但可能更快
c.max_size(); //可容纳元素的最大数量
c.at(idx) ; //返回索引为idx所标示的元素。如果idx越界,抛出out_of_range
c[idx] ; //返回索引idx所标示的元素。不进行范围检查
c.front() ; //返回第一个元素,不检查元素是否存在
c.back(); //返回最后一个元素
c.begin(); //返回一个随机迭代器,指向第一个元素
c.end(); //返回一个随机迭代器,指向最后元素的下一位置
变动性操作:
c.assign(n , elem); //将n个elem副本赋值给c
c.assing(beg , end); //将区间[beg;end]中的元素赋值给c;
c.push_back(elem); //在尾部添加元素elem
c.pop_back() ; //移除最后一个元素(但不回传)
c.push_front() ; //在头部添加元素elem
c.pop_front() ; //移除头部一个元素(但不回传)
c.erase(pos) ; //移除pos位置上的元素,返回一元素位置
//如c.erase( c.begin() + 5) //移除第五个元素
c.insert(pos , elem); //在pos位置插入一个元素elem,并返回新元素的位置c.insert(pos , n , elem); //在pos位置插入n个元素elem,无返回值
c.insert(pos , beg , end);
c.resize(num); //将容器大小改为num。可更大或更小。
c.resize(num , elem); //将容器大小改为num,新增元素都为 elem
c.clear(); //移除所有元素,将容器清空
关联容器
一、关联容器的类型
map 关联数组:元素通过键来存储和读取采用键-值的存储方式,键是唯一的不能重复set 大小可变的集合,只存储键(唯一),支持通过键的快速读取,不能修改已有的键值multimap 支持同一个键出现多次的map 类型
multiset 支持同一个键出现多次的set 类型
顺序容器键值的要求,键所使用的类型必须定义了<操作符
二、pair类型简介(头文件utility中定义)
pair
make_pair(v1,v2) 以v1,v2值创建一个新的pair对象,返回一个pair类型
三、关联容器的操作
关联容器的操作大多数和顺序容器共享,但也存在区别:
关联容器不提供push_front,push_back,front,back,pop_front,pop_back操作
不能通过容器大小来定义关联容器,不支持assign,resize操作
四、map类型
1、 map类定义的类型
map
map
map
map
second元素的类型是:
map
1.set(集合)
set关联容器,值与键类型相同,值就是键,因为键是唯一的,所以里面的元素不会有重复的,插入元素后自动排序。
STL提供了一些通用函数,可以对set对象操作:
1、set_union(),并集;
2、set_intersection(),交集;
3、set_difference(),两个集合的差;
4、insert(),插入元素;
set的两个成员函数:
1、lower_bound(),迭代器,指向第一个不小于键参数的成员;
2、upper_bound(),迭代器,指向第一个大于键参数的成员;
set的基本操作:
begin() 返回指向第一个元素的迭代器
clear() 清除所有元素
count() 返回某个值元素的个数
empty() 如果集合为空,返回true
end() 返回指向最后一个元素的迭代器
equal_range() 返回集合中与给定值相等的上下限的两个迭代器
erase() 删除集合中的元素
find() 返回一个指向被查找到元素的迭代器
get_allocator() 返回集合的分配器
insert() 在集合中插入元素
lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
key_comp() 返回一个用于元素间值比较的函数
max_size() 返回集合能容纳的元素的最大限值
rbegin() 返回指向集合中最后一个元素的反向迭代器
rend() 返回指向集合中第一个元素的反向迭代器
size() 集合中元素的数目
swap() 交换两个集合变量
upper_bound() 返回大于某个值元素的迭代器
value_comp() 返回一个用于比较元素间的值的函数
2. C++ multiSets(多元集合)
多元集合(multiSets)和集合(sets)相像,只不过支持重复对象。(具体用法请参照set容器) begin()返回指向第一个元素的迭代器
clear()清除所有元素
count()返回指向某个值元素的个数
empty()如果集合为空,返回true
end()返回指向最后一个元素的迭代器
equal_range()返回集合中与给定值相等的上下限的两个迭代器
erase()删除集合中的元素
find()返回一个指向被查找到元素的迭代器
get_allocator()返回多元集合的分配器
insert()在集合中插入元素
key_comp()返回一个用于元素间值比较的函数
lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器max_size() 返回集合能容纳的元素的最大限值
rbegin()返回指向多元集合中最后一个元素的反向迭代器
rend()返回指向多元集合中第一个元素的反向迭代器
size()多元集合中元素的数目
swap()交换两个多元集合变量
upper_bound()返回一个大于某个值元素的迭代器
value_comp()返回一个用于比较元素间的值的函数
3.C++ maps
C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear()删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
4.C++ multimaps
begin()返回指向当前集合中第一个元素的迭代器。
clear()清除当前集合中的所有元素。
count()返回当前集合中出现的某个值的元素的数目。
empty()如果当前多元集合为空,返回true;否则返回false。
end()返回指向当前集合中最后一个元素的迭代器。
equal_range()返回集合中与给定值相等的上下限的两个迭代器。
erase() 删除元素;
find()在当前集合中查找等于key值的元素,并返回指向该元素的迭代器;
如果没有找到,返回指向多元集合最后一个元素的迭代器。
get_allocator()返回当前集合的分配器。
insert() 在集合中插入元素
key_comp()返回一个用于元素间值比较的函数对象。
lower_bound()返回一个指向大于或者等于key值的第一个元素的迭代器。
max_size()返回当前多元集合能容纳元素的最大限值。
rbegin()返回指向当前多元集合中最后一个元素的反向迭代器。
rend()返回指向集合中第一个元素的反向迭代器。
size()返回当前多元集合中元素的数目。
swap()交换当前多元集合和obj多元集合中的元素。
upper_bound()在当前多元集合中返回一个指向大于Key值的元素的迭代器value_comp()返回一个用于比较元素间的值的函数对象。
容器适配器
1.stack(栈)
empty()判断当前堆栈是否为空,为空返回true 否则返回false.
pop() 移除堆栈中最顶层元素。
push() 将val 值压栈(向堆栈栈顶压入一个数据)使其成为栈顶的第一个元素。
size() 返回当前堆栈长度(即内部数据个数)。
top() 得到堆栈栈顶数据。
2.C++ Queues(队列)
back()返回一个引用,指向队列的最后一个元素。
empty()函数返回真(true)如果队列为空,否则返回假(false)。
front()返回队列第一个元素的引用。
pop()函数删除队列的一个元素。
push()函数往队列中加入一个元素。
size()返回队列中元素的个数。
3.C++ Priority Queues(优先队列)
empty() 函数返回真(true)如果优先队列为空,否则返回假(false)。
pop() 函数删除优先队列中的第一个元素。
push() 函数添加一个元素到优先队列中,值为val。
size() 函数返回优先队列中存储的元素个数。
top() 返回一个引用,指向优先队列中有最高优先级的元素。注意只有pop()函数删除一个元素。