程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Primer Plus學習筆記之STL迭代器

C++ Primer Plus學習筆記之STL迭代器

編輯:C++入門知識

C++ Primer Plus學習筆記之STL迭代器

一,為何使用迭代器?

模板使算法獨立於存儲的數據類型,而迭代器使算法獨立於使用的容器類型。

二,迭代器的類型

1,輸入迭代器

2,輸出迭代器

3,正向迭代器

4,雙向迭代器

5,隨機訪問迭代器

三,迭代器的層次結構

迭代器的類型形成了一個層次結構。

正向迭代器具有輸入和輸出迭代器的全部功能,同時還有自己的功能。

雙向迭代器具有正向迭代器的全部功能,同時還有自己的功能。

隨機訪問迭代器具有正向迭代器的全部功能,同時還有自己的功能。

根據特定迭代器類型編寫的算法可以使用該迭代器,也可以使用具有所需功能的任何其他迭代器。

所以具有隨機迭代器的容器可以使用為輸入迭代器編寫的算法。

為什麼需要這麼多迭代器呢?

目的是為了在編寫算法時,盡可能使用要求最低的迭代器,並讓它適用於容器的最大區間。這樣,

通過使用級別最低的輸入迭代器,find()函數便可以用於任何包含可讀取值的容器。而sort()函數

由於需要隨機訪問迭代器,所以只能用於支持這種迭代器的容器。

注意:各種迭代器的類型並不是確定的,而只是一種概念上的描述。

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

所以STL算法可以使用任何滿足其要求的迭代器實現。

四,迭代器的使用

1,將指針用作迭代器

#include

#include

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

#include // Need random(), srandom()

#include // Need time()

#include // Need sort(), copy()

#include // Need vector

using namespace std;

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

int main()

{

// Seed the random number generator

srandom( time(NULL) );

// Construct vector and fill with random integer values

vector 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& v, const char* s)

{

cout << endl << s << endl;

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

ostream_iterator(cout, "\t"));

cout << endl;

}

3,幾種插入迭代器

#include

#include

#include

using namespace std;

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

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

int main()

{

list 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::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& a, const char* s)

{

cout << s << endl;

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

ostream_iterator(cout, " "));

cout << endl;

}

4,容器迭代器

#include

#include

#include

using namespace std;

vector intVector(100);

void main()

{

intVector[20] = 50;

vector::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;

}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved