迭代器和指標差別

2022-09-23 17:42:10 字數 2223 閱讀 9485

迭代器與指標的差別:

迭代器:

(1)迭代器不是指標,是類模板,表現的像指標。他只是模擬了指標的一些功能,通過過載了指標的一些操作符,->,*,++ –等封裝了指標,是乙個「可遍歷stl( standard template library)容器內全部或部分元素」的物件, 本質是封裝了原生指標,是指標概念的一種提公升(lift),提供了比指標更高階的行為,相當於一種智慧型指標,他可以根據不同型別的資料結構來實現不同的++,–等操作;

(2)迭代器返回的是物件引用而不是物件的值,所以cout只能輸出迭代器使用*取值後的值而不能直接輸出其自身。

(3)在設計模式中有一種模式叫迭代器模式,簡單來說就是提供一種方法,在不需要暴露某個容器的內部表現形式情況下,使之能依次訪問該容器中的各個元素,這種設計思維在stl中得到了廣泛的應用,是stl的關鍵所在,通過迭代器,容器和演算法可以有機的粘合在一起,只要對演算法給予不同的迭代器,就可以對不同容器進行相同的操作。

ite=find(vec.begin(),vec.end(),88);

vec.insert(ite,2,77); //迭代器標記的位置前,插入資料;

cout<注:迭代器在使用後就釋放了,不能再繼續使用,但是指標可以!!指標:

指標能指向函式而迭代器不行,迭代器只能指向容器;指標是迭代器的一種。指標只能用於某些特定的容器;迭代器是指標的抽象和泛化。所以,指標滿足迭代器的一切要求。

總之,指標和迭代器是有很大差別的,雖然他們表現的行為相似,但是本質是不一樣的!乙個是類模板,乙個是存放乙個傢伙的位址的指標變數。

實現乙個迭代器。須要做一下工作:

1.定義5類迭代器的標誌類,該標誌類用於實現函式的差別呼叫(即過載),比如求兩迭代器距離函式distance(iter1,iter2,tag)。移動函式advance(iter,n,tag)。

這五個標誌類分別為:input_iterator_tag,output_iterator_tag。forward_iterator_tag,bidirectional_iterator_tag,random_access_iterator_tag。

2.對於每個iterator類,都必須包括5個屬性,分別為:iterator_category、value_type、difference_type、pointer、reference。

3.定義乙個迭代器的「屬性榨汁機」iterator_traits,用於獲取iterator的5中屬性值。

4.定義迭代器的操作。分別為:

1) 獲取iterator的標誌----->iterator_category(iter)。

2)獲取兩迭代器差值的型別----->distance_type(iter)。

3)獲取迭代器的原始型別--------->value_type(iter);

4)求兩迭代器的距離---------------->distance(iter1,iter2,tag);

5)將迭代器移動n位------------------>advance(iter,n,tag)。一提到stl,必需要立即想到其基本的6個組成部件,各自是:容器、演算法、迭代器、仿函式、介面卡和空間分配器。本文主要介紹迭代器。

迭代器是連線容器和演算法的一種重要橋梁。

在stl中,迭代器主要分為5類。各自是:輸入迭代器、輸出迭代器、前向迭代器、雙向迭代器和隨機訪問迭代器。迭代器失效?沒錯。就是迭代器失效。

迭代器失效指的是迭代器原來所指向的元素不存在了或者發生了移動,此時假設不更新迭代器,將無法使用該過時的迭代器。

迭代器失效的根本原因是對容器的某些操作改動了容器的記憶體狀態(如容器又一次載入到記憶體)或移動了容器內的某些元素。

使vector迭代器失效的操作

1.向vector容器內加入元素(push_back,insert)

向vector容器加入元素分下面兩種情況:

1)若向vector加入元素後,整個vector又一次載入。即前後兩次vector的capacity()的返回值不同一時候,此時該容器 內的全部元素相應的迭代器都將失效。

2)若該加入操作不會導致整個vector容器載入,則指向新插入元素後面的那些元素的迭代器都將失效。

2,刪除操作(erase,pop_back,clear)

vector執行刪除操作後,被刪除元素相應的迭代器以及其後面元素相應的迭代器都將失效。

3.resize操作:調整當前容器的size

調整容器大小對迭代器的影響分例如以下情況討論:

a.若調整後size>capacity,則會引起整個容器又一次載入,整個容器的迭代器都將失效。

b.若調整後size

引用和指標的差別,陣列和指標的差別

一 引用和指標的差別 1 引用並不是物件,它僅僅是為乙個已存在的物件所起的另外乙個名字。必須初始化,並且無法改變它繫結的物件,之後每次使用這個引用都是訪問最初繫結的那個物件。2 指標本身是物件,能夠不用初始化,能夠改變指標指向的物件 二 指標與陣列的差別 指標陣列 儲存資料的位址 儲存資料 間接訪問...

C 迭代器iterator和指標

1.指標和iterator都支援與整數進行 運算,而且其含義都是從當前位置向前或者向後移動n個位置 2.指標和iterator都支援減法運算,指標 指標得到的是兩個指標之間的距離,迭代器 迭代器得到的是兩個迭代器之間的距離 3.通過指標或者iterator都能夠修改其指向的元素 指標是c語言裡面就有...

C 迭代器和指標區別

1 總的說 1 範圍 指標屬於迭代器的一種 指標可以用來遍歷容器 陣列 2 功能 迭代器有著比指標更細的劃分並對應能力不同的功能 過載不同的運算子 3 行為 迭代器比指標更統一和良好的用法 更輕易使用begin 和end 不用擔心越界 2 迭代器 1 迭代器不是指標,是類模板,表現的像指標。模擬了指...