C++ Primer Plus复习题4.12 第13题  动态创建数组与vector容器的创建


题目:
13.编写一段代码,要求用户输入一个正整数,然后创建一个动态的int数组,其中包含的元素数目等于用户输入的值。首先使用new来完成这项任务,再使用vector对象来完成这项任务。

答案:
这里假设已经包含了头文件iostream和vector,并有一条using编译指令:
unsigned int size;
cout << "Enter a positive integer: ";
cin >> size ;
int * dyn = new int[size];
vector<int> dv(size);

C++技术网辅导详解解答:
    动态创建数组和vector的差别,前者是固定长度的,后者是无限长度的。数组在创建之前,我们可以指定长度,但是一旦创建后,长度就固定了。而vector则是容器,是可以自动扩容的。我们当然可以在创建对象的时候指定一个大小,但是当放入容器的元素个数快超过可容纳的总数的时候,容器会自动扩大容量,而这个不需要我们做任何的操作,容器自己会完成,对我们来讲是无感的,我们只要不停的往容器里放就行了。

    不过一般情况下,我们使用vector都懒得写大小,让容器自己去扩展就行。但是我们如果事先指定了大小,那么创建的时候就会按照我们的要求创建好,以免在后续容量不足的时候扩容,从而降低性能。比如我们将会存入一万个数据,我们事先就指定大小,一次性可以分配好,而如果开始不指定,在存入数据的过程中,容器一次只会增加一小部分容量,然后快满的时候再继续增加,那么大量的数据就会在中间不断的扩容,从而让效率降低了,而在一开始可以预计的情况下一次性创建好,那么后续存入数据就不会再经常扩容,操作自然就更快了。