C++之迭代器

来源:http://www.cnblogs.com/iloverain/archive/2016/08/08/5749676.html
-Advertisement-
Play Games

迭代器的概念 迭代器是用來訪問string對象或vector對象的元素的,類似於下標運算和指針。 其對象是容器中的元素或string對象中的字元; 使用迭代器可以訪問某個元素,迭代器也能從一個元素移動到另外一個元素。 迭代器的使用 不同於指針,獲取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭 ...


迭代器的概念

迭代器是用來訪問string對象或vector對象的元素的,類似於下標運算和指針。

其對象是容器中的元素或string對象中的字元;

使用迭代器可以訪問某個元素,迭代器也能從一個元素移動到另外一個元素。

迭代器的使用

不同於指針,獲取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭代器的成員;

比如,這些類型擁有名為begin和end的成員,begin成員負責返回指向第一個元素(或第一個字元)的迭代器,end成員則負責返回指向容器“尾元素的下一個位置”的迭代器;

如果迭代器為空,則begin和end返回的是同一個迭代器;

標準容器迭代器的運算符

和指針類似,也能通過解引用迭代器來獲取它所指向的元素,執行解引用的迭代器必須合法並確實指向著某個元素。

string  s("some String");
if (s.begin() !=s.end() )  //確保s非空
{
   auto it=s.begin(); //it 表示s的第一個字元
   *it=toupper(*it);
}

迭代器類型

 begin與end運算符

結合解引用與成員訪問操作

 解引用迭代器可以獲得迭代器所指向的對象(類似與指針)。例如:若it是Vector對象的迭代器,

檢查其元素是否為空,只需檢查it所指向的字元串是否為空;

(*it).empty();   // it->empty();

某些對vector對象的操作會使迭代器失效

但凡是使用了迭代器的迴圈體,都不要向迭代器所屬的容器添加元素;

迭代器運算

 

迭代器的算術運算

可以令迭代器和一個整數值相加(或相減),其返回值是向前(或向後)移動了若幹個位置的迭代器。

auto mid = vi.begin() + vi.size() / 2; //vi.size()=10,則mid指向元素是vi[10]
if(it<mid) //處理vi前半部分的元素

使用迭代器運算(二分搜索)

代碼

指針也是迭代器

指向數組元素的指針擁有更多功能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Structs2中的Bean預設的是單例,在整個程式運行期間,每個Bean只有一個實例,只要程式在運行,這個實例就一直存在。 對於Action來說,單例就容易出問題。如果客戶端每次提交的參數都是一樣的,後面提交的值把前面提交的值覆蓋了,那問題還不是很大。但是如果存在可選參數的情況,比如上次提交的是參 ...
  • 一、@ModelAttribute 註解 對方法標註 @ModelAttribute 註解,在調用各個目標方法前都會去調用 @ModelAttribute 標記的註解。本質上來說,允許我們在調用目標方法前操縱模型數據。 1.在 @ModelAttribute 標註的方法處向模型中存入數據 說明一下: ...
  • 模擬登陸系統主要練習文件的操作、條件語句、迴圈等 知識點: 1.str.strip([chars]): 刪除字元串前邊和後邊的所有空格,chars參數可以定製需要刪除的字元,可選。 input().strip()可以去除用戶輸入時帶入的空格,避免產生不必要的錯誤。 用法: account = inp ...
  • # # COMMON SPRING BOOT PROPERTIES## This sample file is provided as a guideline. Do NOT copy it in its# entirety to your own application. ^^^# # # COR ...
  • # 本文對正則知識不做詳細解釋,僅作入門級的正則知識目錄。 正則表達式的強大早有耳聞,大一時參加一次選拔考試,題目就是用做個HTML解析器,正則的優勢表現得淋漓盡致。題外話不多講,直接上乾貨: 1. 元字元: 與之對應的還有反義字元,大部分為小寫字母變大寫,例如\D表示匹配非數字的字元。 2. 重覆 ...
  • 回到目錄 關於Lind.DDD.Manager的培訓與學習 講解:張占嶺 花名:倉儲大叔 主要框架:Lind.DDD,Lind.DDD.Manager 關於Lind.DDD.Manager 由於數據模型,資料庫初始化(Code.First自動升級資料庫或者進行資料庫版本的遷移)控制器,View視圖, ...
  • 在UML 2.*的13種圖形中,類圖是使用頻率最高的UML圖之一,它表示了類與類之間的關係,幫助開發人員理解系統。它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。本文詳細介紹了類間的依賴關係,關聯關係(聚合、組合等),實現關係以及繼承關係的UML表示形式及其在代碼中的實現方式。 ...
  • 1、面向過程 int a = 10; int b =5; int c = a+b; int r1 = 10; int r2 = 5; double c = r1*r1*3.14 - r2*r2*3.14 缺點:重用性差,擴展性差,可維護性差 2、面向對象 (1)對象:萬物皆對象,對象是類實例化出來的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...