C++數組、指針與vector、iterator

C++定義了內容豐富的抽象數據類型標準庫。其中最重要的之一就是vector。它定義了長度可變的同類型對象的集合。它往往將迭代器用作配套類型,用於訪問其中的元素。迭代器是一種檢查容器內元素並遍歷元素的數據類型。這二者是語言組成部分中更基本的數據類型數組和指針的抽象。

現將兩對的主要區別簡要陳述:

一、數組與vector:

1、vector是數組的抽象,首先,用戶程序使用vector之前,必須包含相關頭文件,最好還應提供合適的using聲明:

  1. #include <vector>  
  2. using std::vector;  

而數組類型則不用;

2、vector不是一種數據類型,而是一個類模板,它可以用來定義任意多種數據類型。vector標準庫類型提供了vector操作,可以直接調用用來檢驗象對是否爲空串、元素的個數、vector對象的複製、動態增加元素、比較等操作,而數組則沒有直接提供這些操作的函數可調用,尤其是要實現數組的複製及求長度的操作相對很不方便;

3、vector是長度可變的,而數組一旦定義長度就不再改變;

4、vector的索引類型爲vector::size_type,數組下標類型爲size_t。

二、指針與iterator

1、迭代器是指針的抽象,標準庫爲每一種標準容器(包括vector)定義了一種迭代器,如:

  1. vector<int>::iterator iter; 

這條語句定義了一個名爲iter的變量,它的數據是由vector<int>定義的iteretor類型,而指針則是直接初始化爲指向某一數組或單個對象的指針,還可以指向函數,而迭代器不行;

2、每種容器都定義了一對命名爲begin和end的函數,用於返回迭代器,其中end操作返回的是迭代器指向vector的"末端元素的下一個",它起到的只是個哨兵的作用,表示我們已經處理完vector中的所有元素,而指針則沒有;

3、任何改變vector長度的操作都會使已存在的迭代器失效,即釋放已有內存,重新申請內存;

4、cout操作符可以直接輸出指針的值,但迭代器進行此操作的時候會報錯,因爲迭代器返回的是對象引用而不是對象的值,因此只能輸出迭代器使用"*"取值後的值而不能直接輸出其自身;

5、因此看來,指針是一種特殊的變量,專門用來存放另一變量的地址,而迭代器是參考了指針的特性而抽象出的STL接口。

相同:

1、迭代器可以做兩個迭代器的相減,前提是二者指向同一vector中的元素,或指向vector末端之後的下一個元素,指針也可以,前提是指向同一數組,得到的都是二者之間的距離;同樣都不能實現相加操作;

2、都是用"*"操作符來實現解引用;

3、二者都支持與整數進行加減操作,其含義都是個自當前位置向前或向後移動相應的位置;

4、二者都能修改其指向的元素。

二者在const修飾下的不同,在const的應用中在論述。

請各位讀者指正賜教.....

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章