STL学习笔记 迭代器

任何一种容器都可以定义三种类别的迭代器

1、   container::iterator

这种迭代器可以以“读/写”模式遍历容器诸元素,并且自身可以改变,例如:

2、  container::const_iterator

这种迭代器只能以“”模式遍历容器诸元素(元素值不可变),并且自身可以改变,例如:

for(vector<int>::const_iteratorciter=ivec.begin();citer!=ivec.end();citer++)

{    cout<<*citer;    //ok(读)

*citer=3;        //error(写)

}

因此,不妨将这种迭代器叫做“指向常量的迭代器”。

3、  constcontainer::iterator

这种迭代器可以以“读/写”模式遍历容器诸元素(元素值可变),但迭代器自身不可以改变,例如:

constvector<int>::iterator newiter=ivec.begin();

*newiter=11;  //ok,可以修改指向容器的元素

newiter++;    // error,这种迭迭代器本身不能被修改

因此,不妨将这种迭代器叫做“常迭代器”。


容器类别

支持的迭代器类别

vector

随机访问迭代器

deque

随机访问迭代器

list

双向迭代器

set

双向迭代器,元素为常量

 multiset

双向迭代器,元素为常量

map

双向迭代器,key为常量

multimap

双向迭代器,key为常量

stack

容器适配器不支持迭代器

queue

容器适配器不支持迭代器

priority_queue

容器适配器不支持迭代器


迭代器的辅助函数

advance(p, n)的作用是让迭代器p前景或后退n个元素

distance(first, last)的作用是计算两个迭代器first和last之间的距离

Iter_swap(p1,p2)的作用是交换迭代器p1和p2所指数据元素的值

迭代器适配器

C++标准程序库提供了数个预先定义的特殊迭代器,称为迭代器适配器(Iterator  Adapters)。如Insert Iterators(安插型迭代器)、Stream Iterators(流迭代器)、Reverse Iterators(逆向迭代器)。

Insert Iterators(安插型迭代器)可以使算法以插入(insert)方式而非覆盖(overwrite)方式动作。有三种安插型迭代器:back_inserter(安插于容器的最尾端)(只有deque、vector、list),front_inserter(安插于容器的最前端)只有deque和list,inserter它主要用于关联式容器。
Stream Iterators(流迭代器)流迭代器是一种迭代适配器,它们是类模板。由于它们独立于容器,所以使用时要包含头文件<iterator>。

  vector<string> coll;

 

    /*read all words from the standard input

    * - source: all strings until end-of-file (or error)

    * - destination: coll (inserting)

    */

    copy(istream_iterator<string>(cin),     // start of source

         istream_iterator<string>(),      // end of source

         back_inserter(coll));             //destination

 

    // sort elements

    sort(coll.begin(), coll.end());  //对所有元素排序

 

    /*print all elements without duplicates

    * - source: coll

    * - destination: standard output (with newline between elements)

    */

    unique_copy(coll.begin(), coll.end(),             // source

                ostream_iterator<string>(cout,"\n")); // destination"\n"的作用是指元素之间的分隔符是换行(还可以是其它的分隔符,如“\t”或“ ”等)。


Reverse Iterators(逆向迭代器)reverse Iterators(逆向迭代器)的作用是以逆向方式进行所有操作,即将递增运算转换为递减运算,将递减运算转换为递增运算。所有容器都可以通过其成员函数rbegin()和rend()产生reverse Iterators。

vector<int> coll;

 

            // insert elements from 1 to 9

            for (int i=1; i<=9; ++i) {

                   coll.push_back(i);

              }

 

              // print all element in reverse order

              copy (coll.rbegin(), coll.rend(),        // source

                     ostream_iterator<int>(cout," "));  // destination




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值