C++ Primer Plus学习笔记之STL迭代器

C++ Primer Plus学习笔记之STL迭代器

一,为何使用迭代器?

模板使算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。

二,迭代器的类型

1,输入迭代器

2,输出迭代器

3,正向迭代器

4,双向迭代器

5,随机访问迭代器

三,迭代器的层次结构

迭代器的类型形成了一个层次结构。

正向迭代器具有输入和输出迭代器的全部功能,同时还有自己的功能。

双向迭代器具有正向迭代器的全部功能,同时还有自己的功能。

随机访问迭代器具有正向迭代器的全部功能,同时还有自己的功能。

根据特定迭代器类型编写的算法可以使用该迭代器,也可以使用具有所需功能的任何其他迭代器。

所以具有随机迭代器的容器可以使用为输入迭代器编写的算法。

为什么需要这么多迭代器呢?

目的是为了在编写算法时,尽可能使用要求最低的迭代器,并让它适用于容器的最大区间。这样,

通过使用级别最低的输入迭代器,find()函数便可以用于任何包含可读取值的容器。而sort()函数

由于需要随机访问迭代器,所以只能用于支持这种迭代器的容器。

注意:各种迭代器的类型并不是确定的,而只是一种概念上的描述。

迭代器是一系列要求,而不是类型,比如指针也可以满足一类迭代器的要求—正向迭代器。

所以STL算法可以使用任何满足其要求的迭代器实现。

四,迭代器的使用

1,将指针用作迭代器

#include <iostream.h>

#include <algorithm>

 

using namespace std;

 

#define SIZE 100

int iarray[SIZE];

 

int main()

{

  iarray[20] = 50;

  int* ip = find(iarray, iarray + SIZE, 50);

  if (ip == iarray + SIZE)

    cout << "50 not found in array" << endl;

  else

    cout << *ip << " found in array" << endl;

  return 0;

}

2,流及迭代器

#include <iostream.h>

#include <stdlib.h>    // Need random(), srandom()

#include <time.h>      // Need time()

#include <algorithm>   // Need sort(), copy()

#include <vector>      // Need vector

 

using namespace std;

 

void Display(vector<int>& v, const char* s);

 

int main()

{

  // Seed the random number generator

  srandom( time(NULL) );

 

  // Construct vector and fill with random integer values

  vector<int> collection(10);

  for (int i = 0; i < 10; i++)

    collection[i] = random() % 10000;;

 

  // Display, sort, and redisplay

  Display(collection, "Before sorting");

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

  Display(collection, "After sorting");

  return 0;

}

 

// Display label s and contents of integer vector v

void Display(vector<int>& v, const char* s)

{

  cout << endl << s << endl;

  copy(v.begin(), v.end(),

    ostream_iterator<int>(cout, "\t"));

  cout << endl;

}

3,几种插入迭代器

#include <iostream.h>

#include <algorithm>

#include <list>

 

using namespace std;

 

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

 

void Display(list<int>& v, const char* s);

 

int main()

{

  list<int> iList;

 

  // Copy iArray backwards into iList

  copy(iArray, iArray + 5, front_inserter(iList));

  Display(iList, "Before find and copy");

 

  // Locate value 3 in iList

  list<int>::iterator p =

    find(iList.begin(), iList.end(), 3);

 

  // Copy first two iArray values to iList ahead of p

  copy(iArray, iArray + 2, inserter(iList, p));

  Display(iList, "After find and copy");

 

  return 0;

}

 

void Display(list<int>& a, const char* s)

{

  cout << s << endl;

  copy(a.begin(), a.end(),

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

  cout << endl;

}

4,容器迭代器

#include <iostream.h>

#include <algorithm>

#include <vector>

 

using namespace std;

 

vector<int> intVector(100);

 

void main()

{

  intVector[20] = 50;

  vector<int>::iterator intIter =

    find(intVector.begin(), intVector.end(), 50);

  if (intIter != intVector.end())

    cout << "Vector contains value " << *intIter << endl;

  else

    cout << "Vector does not contain 50" << endl;

}

 



C++ Primer Plus学习笔记之STL迭代器,布布扣,bubuko.com

C++ Primer Plus学习笔记之STL迭代器

上一篇:深入理解C语言


下一篇:python遍历目录文件脚本的示例