日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(10)chapter10 泛型算法 :泛型算法结构

發(fā)布時間:2025/3/21 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(10)chapter10 泛型算法 :泛型算法结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
名稱定義
輸入迭代器只讀,不寫;單遍掃描,只能遞增
輸出迭代器只寫,不讀;單遍掃描,只能遞增
前向迭代器可讀寫,多遍掃描,只能遞增
雙向迭代器可讀寫,多遍掃描,可遞增遞減
隨機(jī)訪問迭代器可讀寫,多遍掃描,支持全部迭代器運(yùn)算

1. 輸入迭代器(input iterator)

支持的操作集:==, !=, 前綴++, 后綴++, *, ->。

eg1. istream_iterator是一種輸入迭代器
eg2. find, accumulate算法要求輸入迭代器

find(line.crbegin(), line.crend(), ','); string result2 = accumulate(lst.cbegin(), lst.cend(), string(""));

2. 輸出迭代器(output iterator)

支持的操作集:前綴++, 后綴++, *(只能出現(xiàn)在賦值運(yùn)算的左操作數(shù)上)。
推出迭代器要求每個迭代器必須正好寫入一次。
eg1. ostream_iterator是輸出迭代器
eg2. copy算法需要操作輸出迭代器v2。

vector<int> v2 = { 4,5,6,7,8,9,4 }; int a1[] = { 0,1,2,3,4,5,6 }; auto ret = copy(begin(a1), end(a1), v2.begin());

3. 前向迭代器(forward iterator)

讀和寫,只能沿一個方向移動,支持輸入迭代器和輸出迭代器提供的所有操作,還支持對同一個元素的多次讀寫。例如,replace算法

eg. replace需要這種迭代器。

vector<int> v2 = { 4,5,6,7,8,9,4 }; int a1[] = { 0,1,2,3,4,5,6 }; replace(v2.begin(), v2.end(), 4, 42); for (auto it : v2) cout << " " << it;

replace_copy 前兩個參數(shù)必須是輸入迭代器,第3個參數(shù)得是輸出迭代器。

replace_copy(v2.cbegin(), v2.cend(), back_inserter(v3), 4, 42);forward_list forward_list<int> vi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; auto prev = vi.before_begin();

4. 雙向迭代器(bidirectional iterator)

讀和寫,除了支持前向迭代器的所有操作,還支持反向和正向、即是前綴–和后綴–,即支持雙向遍歷容器。

例如,reverse算法要求這類迭代器。標(biāo)準(zhǔn)庫容器中提供的迭代器都至少達(dá)到雙向迭代器的要求。

5. 隨機(jī)訪問迭代器(random-access iterator)

讀和寫。提供在常量時間內(nèi)訪問容器任意位置的功能。

支持完整的迭代器操作集:
1)關(guān)系運(yùn)算:==, !=, <, <=, >, >=;
2)算術(shù)運(yùn)算:it + n, it - n, it += n, it -= n以及it1 - it2;
3)下標(biāo)運(yùn)算:it[n],等價于*(it + n)。需要隨機(jī)訪問迭代器的泛型算法包括sort算法。例如,vector, deque, string迭代器是隨機(jī)訪問迭代器,用作訪問內(nèi)置數(shù)組元素的指針也是隨機(jī)訪問迭代器。

6. 總結(jié)

除了輸出迭代器,其他類別的迭代器形成了一個層次結(jié)構(gòu):需要低級類別迭代器的地方,可使用任意一種更高級的迭代器。例如,對于需要輸入迭代器的算法,可傳遞前向、雙向或隨機(jī)訪問迭代器調(diào)用該算法。而反之則不行。注意:向算法傳遞無效的迭代器類別所引起的錯誤,無法保證會在編譯時被捕獲到。

map, set, list類型提供雙向迭代器
string, vector和deque容器上的迭代器都是隨機(jī)訪問迭代器
用作訪問內(nèi)置數(shù)組元素的指針也是隨機(jī)訪問迭代器。

另外,雖然map和set類型提供雙向迭代器,但關(guān)聯(lián)容器不能使用任何寫序列元素的算法。只能使用與關(guān)聯(lián)容器綁在一起的迭代器來提供用于讀操作的實(shí)參。因此,在處理算法時,最好將關(guān)聯(lián)容器上的迭代器視為支持自減運(yùn)算的輸入迭代器,而不是完整的雙向迭代器。

總結(jié)

以上是生活随笔為你收集整理的C++ Primer 5th笔记(10)chapter10 泛型算法 :泛型算法结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。