C++中的容器
標準序列容器:vector、string、deque、list
標準關聯容器:set、multiset、map、multimap
迭代器的分類
根據迭代器所支援的操作,可以把迭代器分為5類。
1、輸入迭代器:是唯讀迭代器,在每個被遍曆的位置上只能讀取一次。
2、輸出迭代器:是唯寫迭代器,在每個被遍曆的位置上只能被寫一次。
3、前向迭代器:兼具輸入和輸出迭代器的能力,但是它可以對同一個位置重複進行讀和寫。但它不支援operator--,所以只能向前移動。
4、雙向迭代器:很像前向迭代器,只是它向後移動和向前移動同樣容易。
5、隨機訪問迭代器:有雙向迭代器的所有功能。而且,它還提供了“迭代器算術”,即在一步內可以向前或向後跳躍任意位置。
C++容器中提供的迭代器
1、輸入和輸出迭代器的模型分別是建立在針對輸入和輸出資料流(例如檔案)的讀寫操作基礎上的。所以不難理解,輸入和輸出迭代器最常見的表現形式是 istream_iterator和ostream_iterator。
2、所有的標準STL容器都支援比前向迭代器功能更強大的迭代器。(雜湊容器的一種、單向鏈表容器例外,它們提供前向迭代器)
3、標準關聯容器都提供了雙向迭代器。list也是如此。
4、vector、string、deque都提供了隨機訪問迭代器。指向數組的內部指標對於數組來說也是隨機訪問迭代器。
istream_iterator和ostream_iterator使用樣本
istream_iterator
1 // istream_iterator example
2 #include <iostream>
3 #include <iterator>
4 using namespace std;
5
6 int main () {
7 double value1, value2;
8 cout << "Please, insert two values: ";
9
10 istream_iterator<double> eos; // end-of-stream iterator
11 istream_iterator<double> iit (cin); // stdin iterator
12
13 if (iit!=eos) value1=*iit;
14
15 iit++;
16 if (iit!=eos) value2=*iit;
17
18 cout << value1 << "*" << value2 << "=" << (value1*value2) << endl;
19
20 return 0;
21 }
22
output:
Please, insert two values: 2 322*32=64 |
ostream_iterator
1 // ostream_iterator example
2 #include <iostream>
3 #include <iterator>
4 #include <vector>
5 using namespace std;
6
7 int main () {
8 vector<int> myvector;
9 for (int i=1; i<10; ++i) myvector.push_back(i*10);
10
11 ostream_iterator<int> out_it (cout,", ");
12 copy ( myvector.begin(), myvector.end(), out_it );
13 return 0;
14 }
15
output:
10, 20, 30, 40, 50, 60, 70, 80, 90, |