C++定義了內容豐富的抽象數據類型標準庫。其中最重要的之一就是vector。它定義了長度可變的同類型對象的集合。它往往將迭代器用作配套類型,用於訪問其中的元素。迭代器是一種檢查容器內元素並遍歷元素的數據類型。這二者是語言組成部分中更基本的數據類型數組和指針的抽象。
現將兩對的主要區別簡要陳述:
一、數組與vector:
1、vector是數組的抽象,首先,用戶程序使用vector之前,必須包含相關頭文件,最好還應提供合適的using聲明:
- #include <vector>
- using std::vector;
而數組類型則不用;
2、vector不是一種數據類型,而是一個類模板,它可以用來定義任意多種數據類型。vector標準庫類型提供了vector操作,可以直接調用用來檢驗象對是否爲空串、元素的個數、vector對象的複製、動態增加元素、比較等操作,而數組則沒有直接提供這些操作的函數可調用,尤其是要實現數組的複製及求長度的操作相對很不方便;
3、vector是長度可變的,而數組一旦定義長度就不再改變;
4、vector的索引類型爲vector::size_type,數組下標類型爲size_t。
二、指針與iterator
1、迭代器是指針的抽象,標準庫爲每一種標準容器(包括vector)定義了一種迭代器,如:
- 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的應用中在論述。
請各位讀者指正賜教.....