您的位置:首页 > 编程语言 > C语言/C++

C++ vector是什么?应该如何理解

2013-01-15 21:40 471 查看
http://hi.baidu.com/phpok/item/b2df4db0ab6925f262388eab

最近有几个好友问到我C++中的vector到底怎么理解它,很多人没有接触过它。一时间都被搞的晕头转向。其实vector很好理解,它就是可以动态创建对象元素个数的数组。如果你不知道什么是数组那就别浪费时间看下去。因为在C++中数组元素个数的定义只能够使用常量值,或在编译时就可以获得的值。列如

const int ay=5; int array[ay];

或者

int array[5];

不可以使用

int ay; int array[ay];

这种定义的方式。所以,数组元素的个数在C++中除了使用NEW表达式(比较麻烦)之外是不可以动态定义的。那么如何解决这个问题呢。

C++推出了标准库vector

在使用它的时候需要首先引头文件

#include <vector> using std::vector;

接下来用几个简单的列子来说明它和数组的区别。

01 /********************************************************************

02 创建时间: 2009/09/21 21:11

03 文件名称: test1.cpp

04 文件后缀: cpp

05 文件作者: QianLiang

06 07 =====================================================

08 功能说明: 说明什么是vector以及它与数组的区别

09 -----------------------------------------------------------------

10 其他说明:

11 *********************************************************************/

12 #include <iostream>

13 #include <vector>

14 using namespace std;

15

16 int main()

17 {

18 /* 数组:静态定义元素个数 */

19 const int ay=5;

20 int array1[ay];

21

22 /* vector:动态定义元素个数 */

23 int vy;

24 cin>>vy;

25 vector<int> ivec1(vy);

26

27 /* 测试它们每个元素的默认值,这里假设上面的vy输入为5 */

28 for (int i=0;i<ay;++i)

29 {

30 cout<<"数组:\t"<<array1[i]<<endl; //它输出的全是随即数

31 cout<<"vector:\t"<<ivec1[i]<<endl;//它将全部元素初始化为0

32 cout<<endl; 33 }

34

35 /* 测试他们的赋值安全性 */

36 int array2[6];

37 //array1=array2; ←这条语句就是错误的.而

38 vector<int> ivec2(3);

39 ivec1=ivec2; //这条语句是正确的因为它可以动态的确定元素个数

40

41

42 /* 仅仅以上三条测试就足以说明使用vector比数组要安全的多,

43 第一它是动态的管理元素个数,这就避免了许多越界问题的发生

44 第二当未对它们进行初始化操作的时候vector会自动为每个元素添加

45 该类型的安全默认值.这也避免了若干问题的发生.

46

47 接下来看看vector的使用,它有4个构造函数

48 vector<T> v1; ←vector保存类型为T的对象.默认构造函数v1为空

49 vector<T> v2(v1); ←V2是V1的一个副本.

50 vector<T> v3(n,i); ←v3包含n个值为i的元素.

51 vector<T> v4(n); ←v4含有值初始化的元素的n个副本.*/

52

53 /* vector的操作 */

54 cout<<ivec1.empty();//如果ivec1为空则返回true(1),否则返回false(0)

55 cout<<ivec1.size();//返回ivec1中元素的个数;

56 ivec1.push_back(t) //在ivec1的末尾增加一个值为t的元素.

57

58 return 0;

59 }

什么时候使用vector什么时候使用数组呢?

**由于vector是标准库,而数组则是内置类型。所以如果你追求程序的执行效率的话那就用数组吧。 **可确定数组元素个数的时候尽量使用数组。 **对于指针以及NEW操作符迷糊的时候使用vector,因为它内置有内存管理器。

下面是一个关于vector的编程习题。

01 /********************************************************************

02 创建时间: 2009/09/21 21:18

03 文件名称: 习题3-13.cpp

04 文件后缀: cpp

05 文件作者: QianLiang

06

07 =====================================================

08 功能说明: 读一组整数到vector对象,计算并输出每对相邻元素的和.如

09 果读入元素个数为奇数,则提示用户最后有一个元素没有求和

10 ,并输出其值.然后修改程序:首尾元素两两配对(第一个和最

11 后一个,第二个和倒数第二个,以次类推),计算每对元素的和

12 并输出.

13 -----------------------------------------------------------------

14 其他说明:

15 *********************************************************************/

16 #include <iostream>

17 #include <vector>

18 using namespace std;

19

20 int main()

21 {

22 vector<int> ve;

23 int a(0);

24 const int CI(2);

25

26 cout<<"输入整数,程序计算它们相邻数的和.输入0时程序开始计算"<<endl;

27 /* 请求用户输入整数,每个数字为ve的一个元素,如果用户输入0

28 程序将停止请求*/

29 while (cin>>a && a!=0)

30 {

31 ve.push_back(a);

32 }

33

34 /* 统计ve的元素个数减1后赋给变量b */

35 int b(ve.size()-1);

36

37 /* 判断用户是否直接输入了0,或是键盘上的任意键 */

38 if (ve.size()==0)

39 {

40 cout<<"无元素"<<endl;

41 }

42

43 /* 判断用户输入元素的个数是否为奇数 */

44 else if (ve.size()%CI != 0)

45 {

46 /* 判断用户是否只输入了一个数字 */

47 if (ve.size()==1)

48 {

49 cout<<"一个元素无法计算"<<endl;

50 }

51 else

52 {

53 cout<<"您输入的元素个数是奇数,最后一个数字无法相加"<<endl;

54 for (int i=0;i<b;i+=CI)

55 {

56 cout<<"第"<<i+1<<"组数:"<<ve[i]+ve[i+1]<<endl;

57 }

58

59 cout<<"您输入的最后一个元素为:"<<ve[b]<<endl;

60 }

61 }

62

63 /* 判断用户输入的元素个数是否为偶数 */

64 else if (ve.size()%CI == 0)

65 {

66 for (int i=0;i<b;i+=CI)

67 {

68 cout<<"第"<<i+1<<"组数:"<<ve[i]+ve[i+1]<<endl;

69 }

70 }

71

72 return 0;

73 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: