C++標準庫 第七章 STL迭代器

迭代器

  • 能力:行進和存取的能力

Input迭代器

  • 一次一個向前讀取元素,按此順序一個一個返回元素
  • 例子:從標準輸入裝置(鍵盤) 讀取數據,同一個數據不會被讀取兩次,流水一樣,指向的是邏輯位置
  • 使用前置式遞增運算符 ++x 替代后置式遞增運算符x++,前者不需要返回舊的數值,不需要花費一個對象來保存舊的數值
  • Input無遞減運算操作符號

?Output輸出迭代器

  • 和input迭代器相反,作用是將元素數值一個一個寫入。不可以使用輸出迭代器對同一序列進行兩次遍歷寫入、
  • operator* 只有在賦值語句的左手邊才會有效
  • 輸出迭代器沒有比較操作,無法檢測 輸出迭代器是否有效,或者寫入數據是否成功
  • 例子:inserters用于將元素插入到容器內的一種迭代器,對其賦予一個新的數值,就會將其安插在容器內部,元素之前不會被覆蓋

?Forward (前向)迭代器?

  • forward前向迭代器是 input(全部功能)和output(部分功能)迭代器的結合。
  • 區別于輸出迭代器,前向迭代器可以多次指向同一群集中的同一個元素,并可以多次處理同一個元素
// Ok for output iterators
// Error for forward iterators
while(true){*pos = foo();++pos;
}// Ok for forward iterators
// Error for output iterators
while(pos != coll.end()){*pos = foo();++pos;
}
  • forward迭代器提領數據之前需要確保數據有效,如果使用while(true),就會出現錯誤,因為forward會訪問 end()對應的元素,引發錯誤
  • 輸出迭代器不可以使用 這個循環?while(pos != coll.end())???,因為其沒有定義operator!=

Bidirectional?

?Random Access (隨機存取)迭代器

  • 需要提供迭代器的算數運算,類似于指針的算數運算,也就是加減某一個特定的偏移量,能處理距離問題,使用諸如 < >等相互關系運算符進行比較
  • 支持隨機存取迭代器的對象和型別:可隨機存取的容器(vector\deque)、strings(字符串、string、wstring)、一般的array(指針)

  • 只有是隨機存取迭代器才可以使用operator < 作為循環的結束與否的判斷條件
  • 代碼一定要嚴謹:比如(coll.end()-1)如果群集為空,便會訪問到begin()之前的數據,出現錯誤;
  • 下面的代碼可能出現問題,vector迭代器可能被實例化為一般的指針,考慮到C++不允許你修改任何基本型別的暫時值(包括指針),但是struct和class可以,因此使用輔助對象

?

  • ?strings迭代器也常會被實例化為一般的字符指針

迭代器相關的輔助函數

  • advance() 、distance() 適用于random access迭代器,前進后退以及處理迭代器之間的距離
  • iter_swap適用于迭代器的數值交換

?

?

?

迭代器配接器

  • ?逆向模式、安插模式、流模式

逆向模式

  • 重新定義遞增和遞減運算,行為倒置

?

?

Insert迭代器

  • ?將賦值新值轉化為安插新值

?

?

?

?

?

?

Input stream

?

?

?

?

?

?

?缺省調用,后面三個數值均使用默認值

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446196.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446196.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nacos集群的ap cp切換_阿里Nacos-配置-多環境

多環境的配置隔離是配置中心最基礎的一個功能之一。不同的環境配置的值不一樣&#xff0c;比如數據庫的信息&#xff0c;業務的配置等。Spring Boot 多環境配置首先我們來回顧下在Spring Boot中用配置文件的方式怎么進行環境的隔離。默認我們都會創建一個application.propertie…

java 值傳遞機制

說明 案例1 案例2 案例3 案例4 案例5 案例6 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:24* function 將對象作為參數傳遞給方法*/ public class Circle {double radius;public double findArea() {return Math.PI * Ma…

密碼學專題 非對稱加密算法指令概述 RSA

非對稱加密算法也稱為公開密鑰算法&#xff0c;其解決了對稱加密算法密鑰需要預分配的難題&#xff0c;使得現代密碼學的研究和應用取得了重大發展。非對稱加密算法的基本特點如下: 加密密鑰和解密密鑰不相同;密鑰對中的一個密鑰可以公開(稱為公開密鑰);根據公開密鑰很難推算出…

python元胞自動機模擬交通_結構專欄 | 解析DEFORM軟件中的元胞自動機法

點擊上方藍色字體&#xff0c;關注我們導語金屬材料的性能取決于內部的微觀組織結構&#xff0c;而好的材料性能和價格是產品最大的優勢。隨著現代物理冶金、熱成形技術、熱處理技術和計算機技術的興起與發展&#xff0c;使預測和控制金屬材料熱加工過程中的組織演變成為可能。…

java 遞歸

概念 代碼 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:42* function 遞歸&#xff1a;求n個數的和、乘積*/ public class Recursion {public static void main(String[] args) {Recursion recursion new Recursion();S…

密碼學專題 非對稱加密算法指令概述 DH算法指令

DH概述 用于密鑰交換的公開算法&#xff0c;廣泛應用于各種安全協議SSL協議同樣支持DH算法DH算法使用之前需要預先共享兩個參數&#xff0c;本原元g和模n&#xff0c;這兩個參數影響到算法的安全性&#xff0c;因此需要預先生成并檢測其安全性生成這些必要參數和管理這些參數的…

java 封裝和隱藏 權限修飾符

概念 問題的引入 封裝性的體現 權限修飾符 案例 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;public void setAge(int age) { /* if (age<0||age>…

if __name__ == __main___python中 __name__ == #x27;__main__#x27; 有什么作用?

python中if __name__ ‘__main__’ 的作用&#xff0c;到底干嘛的&#xff1f;有句話經典的概括了這段代碼的意義&#xff1a;“Make a script both importable and executable”就是讓你寫的腳本模塊既可以導入到別的模塊中用&#xff0c;另外該模塊自己也可執行。這句話&…

密碼學專題 非對稱加密算法指令概述 DSA算法指令

DSA算法和DSA指令概述 DSA算法是美國國家標準的數字簽名算法&#xff0c;只具備數字簽名的功能不具備密鑰交換的功能生成DSA參數然后生成DSA密鑰&#xff0c;DSA參數決定了DSA密鑰的長度三個指令首先是dsaparam指令&#xff0c;該指令主要用來生成DSA密鑰參數&#xff0c;并提…

每天定時打開某個網頁_Python科普帖定時通知

0 復習上一關我們學習了selenium&#xff0c;它有可視模式與靜默模式這兩種瀏覽器的設置方法&#xff0c;二者各有優勢。然后學習了使用.get(URL)獲取數據&#xff0c;以及解析與提取數據的方法。在這個過程中&#xff0c;我們操作對象的轉換過程&#xff1a;除了上面的方法&am…

java 構造器

概念 案例1 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;private String name;public Person() {this.age 18;}public Person(int age, String name) {this.age …

密碼學專題 信息摘要和數字簽名指令

信息摘要 區別于對稱加密和非對稱加密&#xff0c;信息摘要算數是一種不可逆的操作&#xff0c;無論輸入數據的大小輸出的數據長度是固定的信息摘要算數對輸入很敏感&#xff0c;即使數據變化很細微&#xff0c;輸出的結果會出現很大的差異從不同輸入得到相同的輸出的概率非常…

dataframe 篩選_Spark.DataFrame與Spark.ML簡介

本文是PySpark銷量預測系列第一篇&#xff0c;后面會陸續通過實戰案例詳細介紹PySpark銷量預測流程&#xff0c;包含特征工程、特征篩選、超參搜索、預測算法。在零售銷量預測領域&#xff0c;銷售小票數據動輒上千萬條&#xff0c;這個量級在單機版上進行數據分析/挖掘是非常困…

密碼學專題 證書和CA指令 證書和CA功能概述

為什么需要證書 實現了公鑰和私鑰的相互驗證&#xff0c;但是任何人都可以生成很多的密鑰對&#xff0c;密鑰對并沒有關聯實體身份&#xff0c;因此誕生可數字證書前提是CA是所有用戶都信任的用戶需要將自己的信息和公鑰交給CA進行認證生成一個屬于自己并被其與用戶認可的數字…

python怎么接外活_java和Python兩門語言,哪個適合接活單干?

謝邀。 根據知乎規矩&#xff1a;不說需求就挑語言的行為就是耍流氓。 如果接的活傾向于OA系統、管理系統之類的&#xff0c;建議是java&#xff0c;畢竟框架模板都很成熟&#xff0c;也比較好找&#xff0c;快速開發什么的在晚上搜一下&#xff0c;改改樣式就可以了。這些項目…

密碼學專題 證書和CA指令 申請證書|建立CA|CA操作|使用證書|驗證證書

Req指令介紹 功能概述和指令格式 req指令一般來說應該是提供給證書申請用戶的工具&#xff0c;用來生成證書請求以便交給CA驗證和簽發證書。但是&#xff0c;OpenSSL的req指令的功能遠比這樣的要求強大得多&#xff0c;它不僅可以生成RSA密鑰、DSA密鑰&#xff0c;以及將它們…

python語言編寫一個生成九宮格圖片的代碼_python實現圖片九宮格分割

大家都知道在微信朋友圈或者微博以及QQ動態中&#xff0c;有很多“強迫癥患者”發圖片都愛發9張&#xff0c;而有些圖是一張圖片分成的九宮圖&#xff0c;對于這種操作&#xff0c;大家知道是怎么做到的嗎&#xff1f; 本文就是用Python做的一個九宮格圖片生成器&#xff0c;是…

密碼學專題 OpenSSL標準轉換指令

概述 繁多復雜的各種文件編碼格式、證書格式和密鑰格式等。事實上&#xff0c;并非OpenSSL開發者想要將數字世界弄得如此令人頭疼&#xff0c;只是由于各種原因&#xff0c;數字世界存在各種不同的標準&#xff0c;為了盡量兼容這些不同的標準&#xff0c;OpenSSL開發者才相應…