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的应用中在论述。

请各位读者指正赐教.....