《C++标准程序库》学习笔记3 -- 第五章

这一章主要是大概的介绍一下容器,迭代器,算法,仿函数等,为6,7,8,9章的概括。

 

  • 1.(P74)

STL的基本概念就是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当粘合剂。任何算法都可以和任何容器交互运作。

stl

 

 

  • 2.(P75)

容器(Containers)容器类别用来管理一组元素。

总的来说,容器分为两大类:

①.序列式容器(Sequence containers),是可序(ordered)群集。包括vector, queue, list。

②.关联式容器(Associative containers),是已序(sorted)群集。包括set, multiset, map, multimap。

关联式容器依据特定的排序准则,自动为其元素排序。排序准则以函数形式呈现,用以比较元素值(value)或元素键(key)。缺省情况以operator< 进行比较,不过也可以自己提供比较函数,定义出不同的排序准则。

eg

set < int >  tk1;    //  从小到大排序
set < int , greater < int >   >  tk2;    //  从大到小排序

 

通常关联式容器是由二叉排序树实作出来的。

另外,C++标准库还提供了容器配接器(Container Adpters), stack, queue, priority queue.

 

  • 3.(P91)

关于pair的key/value。

可以通过first,second访问。

eg

pos -> first;
(
* pos).second;

 

  • 4.(P93)

迭代器分类:

①.双向迭代器(Bidirectional iterator),list、set、multiset、map、multimap提供的都是这种迭代器

②.随机存取迭代器(Random access iterator),vector、deque、strings所提供的就是这种迭代器

 

  • 5.(P104)

迭代器之配接器(Iterator Adapters)

①Insert iterators(安插型迭代器)

包括back_inserter(), front_inserter(), inserter(),内部分别调用push_back(), push_front(), insert().

②Stream iterators(流迭代器)

istream_iterator<T>(cin)读入T类型,

istream_iterator<T>()产生一个“流结束符”

ostream_iterator<T>(cout)标准读出

③Reverse iterators(逆向迭代器)

 

下面把三个迭代器一起使用,举个例子:

//  Author: Tanky Woo
//  Blog:   www.WuTianQi.com
#include  < cstddef >  
#include 
< iostream >  
#include 
< vector >  
#include 
< list >  
#include 
< deque >  
#include 
< set >  
#include 
< algorithm >  
#include 
< iterator >  
using   namespace  std; 

int  main() 

    list
< int >  coll1; 
    
for ( int  i = 1 ; i <= 9 ++ i) 
        coll1.push_back(i); 
    cout 
<<   " 安插迭代器\n "
    vector
< int >  coll2; 
    copy(coll1.begin(), coll1.end(), back_inserter(coll2)); 
    deque
< int >  coll3; 
    copy(coll1.begin(), coll1.end(), front_inserter(coll3)); 
    
set < int >  coll4; 
    copy(coll1.begin(), coll1.end(), inserter(coll4, coll4.begin())); 
    copy(coll1.begin(), coll1.end(), ostream_iterator
< int > (cout,  "   " )); 
    cout 
<<  endl; 
    copy(coll2.begin(), coll2.end(), ostream_iterator
< int > (cout,  "   " )); 
    cout 
<<  endl; 
    copy(coll3.begin(), coll3.end(), ostream_iterator
< int > (cout,  "   " )); 
    cout 
<<  endl; 
    copy(coll4.begin(), coll4.end(), ostream_iterator
< int > (cout,  "   " )); 
    cout 
<<  endl;


    cout 
<<   " ---------------------------------------------------\n "
    cout 
<<   " 逆向迭代器\n "
        copy(coll1.rbegin(), coll1.rend(), ostream_iterator
< int > (cout,  "   " )); 
    cout 
<<  endl;


    cout 
<<   " ---------------------------------------------------\n "
    cout 
<<   " 流迭代器\n "
    vector
< int >  coll5; 
    copy(istream_iterator
< int > (cin), istream_iterator < int > (), back_inserter(coll5)); 
    copy(coll5.begin(), coll5.end(), ostream_iterator
< int > (cout,  "   " )); 
    cout 
<<  endl;

    system(
" PAUSE " ); 
    
return  EXIT_SUCCESS; 
}

 

 

  • 6.(P124)

不多说,到后面具体学习了再总结。

转载于:https://www.cnblogs.com/tanky_woo/archive/2011/01/24/1943459.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值