darknet迭代多少次_STL:迭代器
生活随笔
收集整理的這篇文章主要介紹了
darknet迭代多少次_STL:迭代器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
迭代器
- 迭代器是算法和容器的橋梁
- 迭代器用作訪問(wèn)容器中的元素
- 算法不直接操作容器中的數(shù)據(jù),而是通過(guò)迭代器間接操作
- 算法和容器獨(dú)立
- 增加新的算法,無(wú)需影響容器的實(shí)現(xiàn)
- 增加新的容器,原有的算法也能適用
輸入流迭代器和輸出流迭代器
輸入流迭代器
istream_iterator<T>- 以輸入流(如cin)為參數(shù)構(gòu)造
- 可用*(p++)獲得下一個(gè)輸入的元素
輸出流迭代器
ostream_iterator<T>- 構(gòu)造時(shí)需要提供輸出流(如cout)
- 可用(*p++) = x將x輸出到輸出流
- 二者都屬于適配器
- 適配器是用來(lái)為已有對(duì)象提供新的接口的對(duì)象
- 輸入流適配器和輸出流適配器為流對(duì)象提供了迭代器的接口
例:從標(biāo)準(zhǔn)輸入讀入幾個(gè)實(shí)數(shù),分別將它們的平方輸出
#include <iterator> #include <iostream> #include <algorithm> using namespace std;//求平方的函數(shù) double square(double x) {return x * x; } int main() {//從標(biāo)準(zhǔn)輸入讀入若干個(gè)實(shí)數(shù),分別將它們的平方輸出transform(istream_iterator<double>(cin), istream_iterator<double>(),ostream_iterator<double>(cout, "t"), square);cout << endl;return 0; }迭代器支持的操作
- 迭代器是泛化的指針,提供了類似指針的操作(諸如++、*、->運(yùn)算符)
- 輸入迭代器
- 可以用來(lái)從序列中讀取數(shù)據(jù),如輸入流迭代器
- 輸出迭代器
- 允許向序列中寫入數(shù)據(jù),如輸出流迭代器
- 前向迭代器
- 既是輸入迭代器又是輸出迭代器,并且可以對(duì)序列進(jìn)行單向的遍歷
- 雙向迭代器
- 與前向迭代器相似,但是在兩個(gè)方向上都可以對(duì)數(shù)據(jù)遍歷
- 隨機(jī)訪問(wèn)迭代器
- 也是雙向迭代器,但能夠在序列中的任意兩個(gè)位置之間進(jìn)行跳轉(zhuǎn),如指針、使用vector的begin()、end()函數(shù)得到的迭代器
迭代器的區(qū)間
- 兩個(gè)迭代器表示一個(gè)區(qū)間:[p1, p2)
- STL算法常以迭代器的區(qū)間作為輸入,傳遞輸入數(shù)據(jù)
- 合法的區(qū)間
- p1經(jīng)過(guò)n次(n > 0)自增(++)操作后滿足p1 == p2
- 區(qū)間包含p1,但不包含p2
例:綜合運(yùn)用幾種迭代器的示例
程序涉及到輸入迭代器、輸出迭代器、隨機(jī)訪問(wèn)迭代器這三個(gè)迭代器概念,并且以前兩個(gè)概念為基礎(chǔ)編寫了一個(gè)通用算法。
#include <algorithm> #include <iterator> #include <vector> #include <iostream> using namespace std;//將來(lái)自輸入迭代器的n個(gè)T類型的數(shù)值排序,將結(jié)果通過(guò)輸出迭代器result輸出 template <class T, class InputIterator, class OutputIterator> void mySort(InputIterator first, InputIterator last, OutputIterator result) {//通過(guò)輸入迭代器將輸入數(shù)據(jù)存入向量容器s中vector<T> s;for (;first != last; ++first)s.push_back(*first);//對(duì)s進(jìn)行排序,sort函數(shù)的參數(shù)必須是隨機(jī)訪問(wèn)迭代器sort(s.begin(), s.end()); copy(s.begin(), s.end(), result); //將s序列通過(guò)輸出迭代器輸出 }int main() {//將s數(shù)組的內(nèi)容排序后輸出double a[5] = { 1.2, 2.4, 0.8, 3.3, 3.2 };mySort<double>(a, a + 5, ostream_iterator<double>(cout, " "));cout << endl;//從標(biāo)準(zhǔn)輸入讀入若干個(gè)整數(shù),將排序后的結(jié)果輸出mySort<int>(istream_iterator<int>(cin), istream_iterator<int>(), ostream_iterator<int>(cout, " "));cout << endl;return 0; } /* 運(yùn)行結(jié)果: 0.8 1.2 2.4 3.2 3.3 2 -4 5 8 -1 3 6 -5 -5 -4 -1 2 3 5 6 8 */迭代器的輔助函數(shù)
- advance(p, n)
- 對(duì)p執(zhí)行n次自增操作
- distance(first, last)
- 計(jì)算兩個(gè)迭代器first和last的距離,即對(duì)first執(zhí)行多少次“++”操作后能夠使得first == last
總結(jié)
以上是生活随笔為你收集整理的darknet迭代多少次_STL:迭代器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python加速循环嵌套的方法_如何加速
- 下一篇: ipython源代码怎么打开_CentO