C/C++资料

STL容器使用


STL入门导入STL的概念与组成Container(容器)Iterator(迭代器)1.C0导入*泛型( Generic)的概念Generic是一种抽象就如OO是一种抽象。

还没有语法与之相对应一一正在开发中。

( Function、Cass、D:pub/icB)vww它为我们带来了什么?STL。

sTL的概念*何为STL?STL( Standard Template Library)是C十十标准庫的一部分(80%),是用C++Template机制来表达泛型的庫STL( Standard Template Library)是用泛型技术来设计完成的实例cin sTL的概念*STL抽象的是什么?有些算法并不依赖于数据结构的特定实现,而只是依赖于该结构的几个基本的语义属性STL抽象出这些基本属性( Concept),成功的将算法与数据结构分离,在没有效率损失的前提下,得到了及大的弹性sTL的组成*六大组件STL的六大组容器( Container)件全都是抽象出来的算法( Algorithm)Concepts迭代器( Iterator)仿函数( Function object)适器{4adaptor空间配制器(allocatorsTL的组成sTL粗件程式所需含入檔*STL在哪里?algorithms個數相闈演算冫nume] c>(註2)ecttackqueue≤ queue>priority queuequeue>Namespacep吕eoin cemenstdmultimemultiset/ BCB4: bcc32 test cpp/ GCC: 9++ -o test. exe test. cpp#include #include #include #include using name space std;template / function templatevoid: print elements(T elem)I cout < elem < ""i1定义并初始化void(*pfi)(int)= print elements;//式指標voidnanInt 1a[7-{0,1,2,3,4,5,6};11t(1a,ia+7//以庫列做焉1ist的初值for each(ilist. begin(), ilist. end(), pfi)0123456ilist. push back(7)ilist. push back(0)对区间内每个元素调list. push back(7)用传入的操作pfilist. push bacor each(ilist. begin(), ilist. end(), pf1):3/01234567079i1it, remove if(bind2nd( modulus(),2));//去除所有奇數for each(ilist. begin(), ilist. end(), pfi);024607Container(容器)*容器的概念用来管理一组元素VectorSet/Multiset□「__→DequeOCMMap/multimapkkkk→(m山Container(容器)*容器的分类序列式容器( Sequence containers)*每个元素都有固定位置一一取决于插入时机和地点,和元素值无关。

vector、 deque、lst关联式容器( Associated containers)*元素位置取决于特定的排序准则,和插入顺序无关*Set、 multiset、map、 multimap序列式容器* Vectors将元素置于一个动态数组中加以管理可以随机存取元素(用索引直接存取)。

数组尾部添加或移除元素非常快速。

但是在中部或头部安插元素比较费时。

序列式容器* Vectors示例用vor前,必须包#include 含头文件< vector>#include using namespace std;int main(vectorsint> coll/ vector container for integer/ append elements with values 1to6for(inti=1;i<=6;++1)co111典2kD, .Com/ print all elements followed by a spacefor (int i=0; i
可以随机存取元素(用索引直接存取)。

数组头部和尾部添加或移除元素都非常快速。

但是在中部或头部安插元素比较费时序列式容器* Deques示例」用dmc前,必须包#include 含头文件< deque>#include using namespace stdint main()deque coll;// deque container for floating-point// insert elements from 1. 1 to 6.6 each at the frontfor (int i=l; 1<=6: ++1)coll push front bi*1.1)i//insertthe front/ print all elements followed by a spacefor (int i=0; i
不提供随机存取(按顺序走到需存取的元素,O(m)。

在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针序列式容器* Lists示例用ls前,必须包含#include 头文件using namespace std;int main()list coll;// list container for character// append elements from 'a to 'Z'for (char c='a'; c<='z; ++)Icoll. push back(c)Wi. docIn. while (! coll. empty())icout < coll front()coll. pop front ();cout
关联式容器*Sets/ Multisets【用 I set/multiset前,必n1ude<10eamy>须包含头文件#include int main(// type of the collectiontypedef sta:: set IntsetiIntSet coll;// set container for int valuesoll insert(l)不能用 push back.因为coll. insert(6)coll. insert(2)是自动排序的。

Int set:: const iterator pos;I(p11.begin(); pos != coll. end();++pos)(std::cout<<大posta: cout < std:: endl关联式容器Maps/MultimapsMap的元素是成对的键值/实值,内部的元素依据其值自动排序Map内的相同数值的元素只能出现一次,Multimapsl内可包含多个数值相同的元素内部由红黑树实现,便于查找。

关联式容器Maps/Multimaps#include 用map/ multimap前,include 须包含头文件#include using namespace std;便捷函int main()数,返/ type of the collectiontypedef multimap IntstringM0:par对象IntstringMMap coll;// container for int/stringcoll.insert(pake_paiN6,"strings"))11rt(make pair 1,in. coll.insert(hake pair3, "multimap"))IntStringMMap: iterator pos;for (pos coll begin(); pos ! coll end()i++poscout < pos->second
不能通过对指向这种数据结构的指针做累加来遍历。

O能不能提供一个行为类似指针的类,来对非数组的数据结构进行遍历呢?这样我们就能够以同样的方式来遍历所有的数据:构(所有容器)。

20迭代器( Iterator)简述*迭代器与容器泛型抽象通过迭代器,我们可以用相同的方式来访问、遍历容器用迭代器遍历容器vector ivec( ai, ai arraysize )vector::iterator iter;for( iter= ivec begin(Piter ivec(end; ++itercout<<兴iter<<容器提供一些函数以每种容器都必须提获得迭代器并以之遍供自己的迭代器历所有元素。

迭代器( Iterator)简述*迭代器的概念迭代器是一个“可遍历STL容器内全部或部分元素”的对象。

个迭代器指出容器中的一个特定位置。

具有遍历复杂数据结构的能力Om迭代器( Iterator)简述*迭代器示例#include #include using namespace stdiint main()list coll;// list container for character elements/ append elements from 'a' to ' Zfor (char c=a'i c<=z'i++c)Ihkfewlist:: const iterator pos;for (pos= coll. begin() pos ! coll end(): ++pos)cout < *pos using namespace stdint main ounsigned int i// constructors used in the same order as described abovevector first; /empty vector of intsvector<> second(4, 100); //four ints with value 100vector third (second begin(, second endo); //iteratinghrough secondvector fourth( third); //a copy of third24Vector谷器使用举例*遍历、追加#include #include using namespace stdint main ovector myvector(10);/10 zero-initialized elementsunsigned intvectorsize type sz= myvector size∥/ assign some valuesfor(i=0; i#include using namespace stdint main ounsigned int i;vector myvectorl set some values(from 1 to 10)for(i=1; i<=10; i++)myvector push back(;∥ erase the6the| ementmyvectorerase(myvector. beegin(+5):oCIn. l/ erase the first 3 elementsmyvector erase(myvector. begin(, myvector begin(+3);cout < "myvector containsfor(i=0; itemplate class Alloc=STL DEFAULT_ ALLOCATOR(Tp)>class hash map27作业*1、简单写一程序,进行list的操作,不低于5种list的常用方法*2、用附件中的文件作为数据源(一组随机数字,重复数据不反复记录),自拟定一种STL睿器进行存储或者自己实现某种结构进行存储;程序支持用数字查询、清除操作,并返回操作结果(成功or失败),及本次操作使用时间28。