C++---迭代器介紹

在這里插入圖片描述


迭代器的介紹

使用迭代器需要引用頭文件,但一般的容器都引用了這個頭文件。
在這里插入圖片描述
這五種迭代器的聲明如下:

struct output_iterator_tag { };//輸出迭代器
struct input_iterator_tag{ };//輸入迭代器
struct forward_iterator_tag : public input_iterator_tag {};//向前迭代器
struct bidirectional_iterator_tag : public forward_iterator_tag {};//雙向迭代器
struct random_access_iterator_tag : public bidirectional_iterator_tag{};//隨機迭代器

在這里插入圖片描述
在這里插入圖片描述

迭代器的適配器

Insert迭代器,也稱為inserter,用于安插新數據。利用這種迭代器,算法將執行安插(insert)而不是賦值(雖然操作是賦值)。

#include <iterator>
#include <vector>
#include <iostream>
using namespace std;//輸出coll的所有元素值
template<typename T>
void Show(const T& coll)
{for (auto& x : coll)cout << x << " ";cout << endl;
}int main()
{vector<int> v;//auto it1 = v.begin();//for (int i = 0; i < 3; i++)//錯誤,v是空的容器,不能通過普通迭代器賦值(插入)數據//{//    *it1 = i;//    it1++;//}Show(v); //輸出容器的所有元素//通過類創建對象back_insert_iterator<vector<int> > it2(v);//創建插入迭代器對象it2 = 1;  //不解引用直接賦值it2++;   //迭代器后移*it2 = 2; //解引用賦值,和直接賦值一樣,等同it2 = 2;++it2;  //迭代器后移,等同it2++*it2 = 3;Show(v);//輸出容器的所有元素//通過函數創建對象back_inserter(v) = 4;//用函數創建插入迭代器并賦值*back_inserter(v) = 5;//用函數創建插入迭代器并賦值Show(v);//接收函數返回值,可以多次使用auto it3 = back_inserter(v);//這種最簡單好用*it3++ = 6;it3++ = 7;it3 = 8;it3 = 9;//這行并沒有用9覆蓋8,而是在后面新插入一個9Show(v);return 0;
}

說明:
1.容器不能通過普通的迭代器插入數據。
2.可以通過back_insert_iterator創建尾插迭代器對象,也可以通過back_inserter函數創建尾插迭代器對象。
3.注意it2 = 1和*it2 = 2都是插入一個數據而不是賦值。
4.建議使用back_inserter,更簡單。

在這里插入圖片描述
所以上面的程序,可以用下面更簡單的方法實現

int main()
{vector<int> v;//接收函數返回值,可以多次使用auto it3 = back_inserter(v);//這種最簡單好用for (int i = 1; i < 10; i++)it3 = i; //插入iShow(v);return 0;
}

安插迭代器種類

C++標準庫提供三種insert迭代器(適配器):back inserter(尾插迭代器),front inserter(頭插迭代器)和general inserter(一般插入迭代器)。它們的區別在于插入的位置。每一種迭代器都可以通過一個函數生成和初始化。

在這里插入圖片描述
上表中cont表示容器,pos表示插入位置迭代器,value表示插入的元素。
當然,容器本身必須支持安插迭代器所調用的容器內部的函數。


本篇完!

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

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

相關文章

基于序列深度學習模型的向量海岸線形狀分類方法 2024.05

本文中提出了一個數據驅動的方法來分類的形狀矢量海岸線&#xff0c;該方法利用基于序列的深度學習算法對海岸線矢量分段進行建模和分類。具體而言&#xff0c;首先將復雜的海岸線劃分為一系列彎曲&#xff0c;并進一步提出了一組不同的特征來描述每個彎曲的形態特征。然后&…

強化學習——學習筆記2

在上一篇文章中對強化學習進行了基本的概述&#xff0c;在此篇文章中將繼續深入強化學習的相關知識。 一、什么是DP、MC、TD&#xff1f; 動態規劃法&#xff08;DP&#xff09;&#xff1a;動態規劃法離不開一個關鍵詞&#xff0c;拆分 &#xff0c;就是把求解的問題分解成若…

【JavaScript腳本宇宙】點燃你的Web開發:數據綁定和MV*框架

逐一剖析&#xff1a;JavaScript框架和庫的概述、特點與應用 前言 在當今技術日新月異的時代&#xff0c;JavaScript庫和框架已成為前端開發的重要工具。這篇文章將詳細介紹六種不同的JavaScript庫和框架&#xff0c;幫助讀者了解他們的主要特性、使用示例和適用場景。 歡迎訂…

gif幀數修改怎么操作?一鍵掌握GIF幀數修改技巧!

gif幀數修改怎么操作&#xff1f;在數字化信息爆炸的時代&#xff0c;GIF動圖因其生動有趣的特性而備受廣大網友喜愛。然而&#xff0c;很多時候我們可能會遇到GIF動圖幀數過多或過少&#xff0c;導致動畫效果不盡如人意的情況。那么&#xff0c;如何對GIF動圖的幀數進行修改呢…

探索微軟Edge開發者工具:優化前端開發的藝術與科學

探索微軟Edge開發者工具&#xff1a;優化前端開發的藝術與科學 引言&#xff1a;Edge開發者工具概覽一、基礎操作&#xff1a;步入DevTools的大門1.1 啟動與界面布局1.2 快速導航與定制 二、元素審查與樣式調整2.1 精準元素選取2.2 實時CSS編輯2.3 自動完成與內聯文檔 三、Java…

YOLOv10最詳細全面講解1- 目標檢測-準備自己的數據集(YOLOv5,YOLOv8均適用)

YOLOv10沒想到出來的如此之快&#xff0c;作為一名YOLO的愛好者&#xff0c;以YOLOv5和YOLOv8的經驗&#xff0c;打算出一套從數據集裝備->環境配置->訓練->驗證->目標追蹤全系列教程。請大家多多點贊和收藏&#xff01;&#xff01;&#xff01;YOLOv5和YOLOv8親測…

dubbo復習:(13)把服務劃分為不同的group 和version,只有服務端和客戶端group和version匹配才能通信

一、接口定義 package cn.edu.tju.service;public interface DevelopService {String invoke(String param); }二、兩個版本的實現&#xff1a; package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboService;DubboService(group "group1"…

bert模型數據集加載方式

數據集構造 無論是機器學習還是深度學習對于數據集的構造都是十分重要。 現記錄一下PyTorch 的 torch.utils.data.Dataset 類的子類。Dataset 類是PyTorch框架中用于處理數據的基本組件&#xff0c;它允許用戶定義自己的數據集類&#xff0c;以滿足特定任務的需求。 Dataset…

重學英語:輸出的重要性

精通一門外語的四要素&#xff1a;聽&#xff0c;說&#xff0c;讀&#xff0c;寫 輸入&#xff1a;聽&#xff0c;讀 輸出&#xff1a;寫&#xff0c;說 因為輸入是我們可以單獨完成&#xff0c;不需要有人互動&#xff0c;所以我們做得最多 輸出練習做得很少&#xff0c;…

Redis中的數據結構與內部編碼

本篇文章主要是對 Redis 常見的數據結構進行講解&#xff0c;同時還對其所對應的不同的內部編碼進行講解。希望本篇文章會對你有所幫助。 文章目錄 一、五大數據結構 二、數據結構對應的編碼方式 String hash list set zset &#x1f64b;?♂? 作者&#xff1a;Ggggggtm &…

js 面試題學習筆記一

1、什么是防抖和節流&#xff1f;有什么區別&#xff1f;如何實現&#xff1f; 防抖&#xff1a;觸發高頻事件后N秒內函數只會執行一次&#xff0c;如果N秒高頻事件再次被觸發&#xff0c;則重新計算時間。&#xff08;a時間觸發&#xff0c;5秒內執行一次&#xff0c;但是第4…

10G UDP協議棧 (9)UDP模塊

目錄 一、UDP協議簡單介紹 二、UDP功能實現 三、仿真 一、UDP協議簡單介紹 UDP協議和TCP協議同位于傳輸層&#xff0c;介于網絡層&#xff08;IP&#xff09;和應用層之間&#xff1a;UDP數據部分為應用層報文&#xff0c;而UDP報文在IP中承載。 UDP 報文格式相對于簡單&am…

電腦出現:excel詞典(xllex.dll)文件丟失或損壞的錯誤提示怎么辦?有效的將丟失的xllex.dll修復

當遇到 Excel 提示“詞典 (xllex.dll) 文件丟失或損壞”的問題時&#xff0c;通常意味著該動態鏈接庫文件&#xff08;Dynamic Link Library&#xff0c;DLL&#xff09;&#xff0c;它與拼寫檢查功能相關聯的&#xff0c;無法被正確找到或者合適地使用。那么有什么辦法可以解決…

LLVM技術在GaussDB等數據庫中的應用

目錄 LLVM和數據庫 LLVM適用場景 LLVM對所有類型的SQL都會有收益嗎&#xff1f; LLVM在OLTP中就一定沒有收益嗎&#xff1f; GaussDB中的LLVM 1. LLVM在華為應用于數據庫的時間線 2. GaussDB LLVM實現簡析 3. GaussDB LLVM支持加速的場景 支持LLVM的表達式&#xff1a…

vue項目出現多次ElMessage

問題&#xff1a; 解決方法&#xff1a; let message null if (message null) { message ElMessage.error(“登錄過期,請重新登錄”); } 最終效果&#xff1a;只出現一個彈框

Orange AIpro Color triangle幀率測試

OpenGL概述 OpenGL ES是KHRNOS Group推出的嵌入式加速3D圖像標準&#xff0c;它是嵌入式平臺上的專業圖形程序接口&#xff0c;它是OpenGL的一個子集&#xff0c;旨在提供高效、輕量級的圖形渲染功能。現推出的最新版本是OpenGL ES 3.2。OpenGL和OpenCV OpenCL不同&#xff0c;…

實操專區-第15周-課堂練習專區-漏斗圖與金字塔圖

實操專區-第15周-課堂練習專區-漏斗圖 下載安裝ECharts&#xff0c;完成如下樣式圖形。 代碼和截圖上傳 基本要求&#xff1a;下圖3選1&#xff0c;完成代碼和截圖 完成 3.1.3.16 漏斗圖中的任務點 基本要求&#xff1a;2個選一個完成&#xff0c;多做1個加2分。 請用班級學號姓…

銀行對公貸款軟件業務流程詳解

對公貸款業務是指商業銀行向企事業單位提供資金支持&#xff0c;用于資本擴充、生產經營、項目建設等方面的融資。其目的在于支持企事業單位的發展&#xff0c;推動經濟增長。通過提供資金支持&#xff0c;企事業單位可以獲得必要的資金來擴大生產規模、提高生產能力、研發新產…

第8周 分布式事務與數據一致性主流解決方案落地

第8周 分布式事務與數據一致性主流解決方案落地 1. 最終一致性原理與解析2. 微服務的解耦3. 本地消息存儲4. 自定義事務管理器5. 本地消息刪除********************************************************************************** 本周拓展數據的一致性落地&#xff0c;采用弱…

【Java EE】網絡原理——HTTP請求

目錄 1.認識URL 2.認識“方法&#xff08;method&#xff09;” 2.1GET方法 2.1.1使用Fiddler觀察GET請求 2.1.2 GET請求的特點 2.2 POST方法 2.2.1 使用FIddler觀察POST方法 2.2.2 POST請求的特點 3.認識請求“報頭”&#xff08;header&#xff09; 3.1 Host 3.2 C…