当前位置:文档之家› C++ 标准模板库(STL)学习总结

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是空的则返回trueend() 返回末尾的迭代器erase() 删除一个元素front() 返回第一个元素get_allocator() 返回list的配置器insert() 插入一个元素到list中max_size() 返回list能容纳的最大元素数量merge() 合并两个listpop_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() 合并两个listswap() 交换两个listunique() 删除list中重复的元素3.C++ deque(双向队列)容器deque和vector非常相似,操作函数基本一致。

它采用动态数组来管理元素,提供随机存取,可以在头尾两端进行快速安插和删除元素操作。

特别要注意,除了头尾两端,在任何地方安插与删除元素,都将导致指向deque元素的任何pointers references iterators 失效。

包括的头文件为:#include <deque>using namespace std;声明一个deque时,一般需要前缀std:: ,如std::deque<int> c;因为类型deque是一个定义在namespace std内的template 。

构造函数:deque<Elem> c ; //产生一个空的deque,其中没有任何元素deque<Elem> c1(c2); //产生另一个同型deque的副本(所有元素都被拷贝)deque<Elem> c(n) ; //产生一个大小为n的dequedeque<Elem> c(n , elem) ; //产生一个大小为n的deque,//每个元素值都是elem。

dequer<Elem> c(begin,end); //产生一个deque,以区间[begin ; end]//做为元素初值析构函数:c.~ deque<Elem>() ;销毁所有元素,并释放内存。

非变动性操作c.size(); //返回当前的元素数量c.empty(); //判断大小是否为零。

等同于c.size() == 0,但可能更快c.max_size(); //可容纳元素的最大数量c.at(idx) ; //返回索引为idx所标示的元素。

如果idx越界,抛出out_of_rangec[idx] ; //返回索引idx所标示的元素。

不进行范围检查c.front() ; //返回第一个元素,不检查元素是否存在c.back(); //返回最后一个元素c.begin(); //返回一个随机迭代器,指向第一个元素c.end(); //返回一个随机迭代器,指向最后元素的下一位置变动性操作:c.assign(n , elem); //将n个elem副本赋值给cc.assing(beg , end); //将区间[beg;end]中的元素赋值给c;c.push_back(elem); //在尾部添加元素elemc.pop_back() ; //移除最后一个元素(但不回传)c.push_front() ; //在头部添加元素elemc.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,新增元素都为 elemc.clear(); //移除所有元素,将容器清空关联容器一、关联容器的类型map 关联数组:元素通过键来存储和读取采用键-值的存储方式,键是唯一的不能重复set 大小可变的集合,只存储键(唯一),支持通过键的快速读取,不能修改已有的键值multimap 支持同一个键出现多次的map 类型multiset 支持同一个键出现多次的set 类型顺序容器键值的要求,键所使用的类型必须定义了<操作符二、pair类型简介(头文件utility中定义)pair<T1,T2> p1;make_pair(v1,v2) 以v1,v2值创建一个新的pair对象,返回一个pair类型三、关联容器的操作关联容器的操作大多数和顺序容器共享,但也存在区别:关联容器不提供push_front,push_back,front,back,pop_front,pop_back操作不能通过容器大小来定义关联容器,不支持assign,resize操作四、map类型1、 map类定义的类型map<k,v>::key_type 键的类型map<k,v>::mapped_type 值的类型map<k,v>::value_type pair类型,<first,second> first元素的类型是:constmap<k,v>::key_typesecond元素的类型是:map<k,v>::mapped_type1.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() 如果集合为空,返回trueend() 返回指向最后一个元素的迭代器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()如果集合为空,返回trueend()返回指向最后一个元素的迭代器equal_range()返回集合中与给定值相等的上下限的两个迭代器erase()删除集合中的元素find()返回一个指向被查找到元素的迭代器get_allocator()返回多元集合的分配器insert()在集合中插入元素key_comp()返回一个用于元素间值比较的函数lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器max_size() 返回集合能容纳的元素的最大限值rbegin()返回指向多元集合中最后一个元素的反向迭代器rend()返回指向多元集合中第一个元素的反向迭代器size()多元集合中元素的数目swap()交换两个多元集合变量upper_bound()返回一个大于某个值元素的迭代器value_comp()返回一个用于比较元素间的值的函数3.C++ mapsC++ Maps是一种关联式容器,包含“关键字/值”对begin() 返回指向map头部的迭代器clear()删除所有元素count() 返回指定元素出现的次数empty() 如果map为空则返回trueend() 返回指向map末尾的迭代器equal_range() 返回特殊条目的迭代器对erase() 删除一个元素find() 查找一个元素get_allocator() 返回map的配置器insert() 插入元素key_comp() 返回比较元素key的函数lower_bound() 返回键值>=给定元素的第一个位置max_size() 返回可以容纳的最大元素个数rbegin() 返回一个指向map尾部的逆向迭代器rend() 返回一个指向map头部的逆向迭代器size() 返回map中元素的个数swap() 交换两个mapupper_bound() 返回键值>给定元素的第一个位置value_comp() 返回比较元素value的函数4.C++ multimapsbegin()返回指向当前集合中第一个元素的迭代器。

相关主题