logo资料库

STL基础详解.pptx

第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
资料共45页,剩余部分请下载后查看
STL基础详解 Made By HALover
STL有什么用? STL提供了一组表示容器、迭代器、函数对象和算法的模板。 ①容器是一个与数组类似的单元,可以存储若干个值。 ②算法是完成特定任务的处方。 ③迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。 ④函数对象是类似于函数的对象,可以是类对象或函数指针。 STL能够构造各种容器和执行各种操作。
模板类VECTOR 计算矢量存储了一组可随机访问的值,即可以使用索引来直接访问矢量的 第10个元素,而不必首先访问前面第9个元素。 要创建vector模板对象,可使用通常的表示法来指出要使用的类型。 另外,vector模板使用动态内存分配,因此可以用初始化参数来指出需要 多少矢量。 #include using namespace std; vector ratings(5); //定义一个由5个int组成的矢量 vector scores(n); //定义一个由n个double组成的矢量
可对矢量执行的操作 所有的STL容器都提供了一些基本方法,其中包括 size()——返回容器中元素数目 swap()——交换两个容器的内容 begin()——返回一个指向容器中第一个元素的迭代器 end()——返回一个表示超过容器尾的迭代器
VECTOR容器特有方法 push_back()方法能够将元素添加到矢量的末尾。这样做时,他将负责内存管理, 增加矢量的长度,使之能够容纳新的成员。 erase()方法删除矢量中给定区间的元素。它接受两个迭代器参数,这些参数定义 了要删除的区间。 scores.erase(scores.begin(),scores.begin()+2); 注:由于vector提供了随机访问功能,因此vector类迭代器定义了诸如 begin()+2等操作。 令p1,p2是两个迭代器,STL文档使用[p1,p2)来表示从p1(包括)到p2(不包 括)的区间。因此,区间[begin(),end())将包括迭代器的所有内容。 所以,上面的代码只删除了2个元素——begin()和begin()+1;
VECTOR容器特有方法 Insert()方法与erase()相反。它接受3个迭代器参数,第一个参数指定了新元素的 插入位置,第二个和第三个迭代器参数定义了被插入区间,该区间通常是另一个 容器对象的一部分。例如,下面的代码将矢量new_v中除第一个元素外的所有元 素插入到old_v矢量的第一个元素前面: old_v.insert(old_v.begin(),new_v.begin()+1,new_v.end());
对矢量可执行的其他操作 for_each()函数可用于很多容器类,它接受3个参数。前两个是定义容器中区间的 迭代器,最后一个是指向函数的指针。for_each()函数将被指向的函数应用于容器 区间中的各个元素。被指向的函数不能修改容器元素的值。可以用for_each函数 来代替for循环。例如: vector::iterator pr; for (pr=books.begin();pr!=books.end();++pr)  ShowReview(*pr); 可被替换为: for_each(books.begin(),books.end(),ShowReview);
对矢量可执行的其他操作 random_shuffle()函数接受两个指定区间的迭代器参数,并随机排列该区间中的 元素。该函数要求容器允许随机访问。例如,下面的语句随机排列books矢量中所 有元素: random_shuffle(books.begin(),books.end());
分享到:
收藏