《C++标准程序库》读书笔记二

《C++标准程序库》读书笔记二

5.Standard Template  Library

1、STL组件主要包括三部分:容器、迭代器与算法。

2、容器分为二类:

(1)序列式容器,如vector, deque, list。元素的次序取决于插入次序。

(2)关联式容器,由二叉树实作而成。如set/multiset, map/multimap。元素的次序取决于元素值。

3、vector:在后面插入元素很方便,但是在前端或中部插入元素需要移动其他元素。

  deque:在前端或者后端插入元素很方便,在中间插入元素需要移动其他元素。

  list:在任何位置上执行安插或者删除动作都很方便,非常迅速,因为只需要改变连接links即可。尤其在中间位置移动元素比vector和deque快得多。但是list不提供operator[]直接存取元素的能力,不支持随机访问。可以调用list.front()/list.pop_front()访问首个元素。

3、容器配接器

(1)Stack,对元素采用LIFO(后进先出)管理策略。

(2)queue,对元素采用FIFO(先进先出)管理策略,相当于普通的缓冲区buffer。

(2)priority queue,容器中的元素可以拥有不同的优先权。所谓优先权,即基于程序员提供的排序准则(缺省使用operator<)而定义。效果等同于:下一个元素永远是queue中优先级最高的元素“,如果同时有多个元素具备最高优先权,则其次序无明确定义。

4、常用的一些算法函数:min_element, max_element, find, sort, reverse等。

5、equal(v1.begin(),v1.end(), v2.begin());

6、三种迭代器配接器:

(1)insert iterator;

1)Back inserters(安插于容器最尾端),内部调用了push_back,适用于vector,deque,list. back_inserter(container)

int arr[5] = {1, 2 ,3, 4, 5};

Vector<int> v1(arr, arr+5);

Vector<int> v2;

Copy(v1.begin(), v1.end(), back_inserter(v2));

2)Front inserters(安插于容器最前端),内部调用了push_front, 适用于deque,list这些提供了push_front()成员函数的容器。front_inserter(container)

list<int> l2;

Copy(v1.begin(), v1.end(), front_inserter(l2));//v2-> 5,4,3,2,1

3)General inserters(一般性安插器): inserter(container, pos),所有容器都可以用,而且这种inserter是唯一可用于关联式容器身上的一种预先定义好的inserter。

set<int> s;

copy(v1.begin(), v1.end(), inserter(s,s.begin()));

(2)流迭代器stream iterator

 

#include <string>

#include <vector>

#include <iostream>

#include <algorithm>

using namespacestd;

 

int _tmain(intargc,_TCHAR*argv[])

{

   vector<string>coll;

   copy(istream_iterator<string>(cin),istream_iterator<string>(),back_inserter(coll));

   sort(coll.begin(),coll.end());

   unique_copy(coll.begin(),coll.end(),ostream_iterator<string>(cout,"\n"));

   return 0;

}

(3)逆向迭代器reverse iterator;使用rbegin()和rend()实现逆向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值