Bootstrap

C++中的vector和Java中的ArrayList的构造函数的区别

前言:之前一直存在一个理解误区,以为 C++ 中的 存在一个构造函数可以为 对象预分配空间,在调试代码时,才发现是自己理解错了,接受一个整数的 的构造函数并不是预分配空间,而是直接添加了元素,因此写一篇文章来记录一下。

C++ 中的 vector

接受一个整数的 的构造函数实际上是直接向 对象中添加了元素:

vector arr (10);
cout << arr.size() << endl; // 10

如果要给 对象预分配空间的话,必须使用 成员函数:

vector arr;
arr.reserve(10);
cout << arr.size() << endl; // 0
cout << arr.capacity() << endl; // 10

Java 中的 ArrayList

而 Java 中的 也有一个类似的构造函数,接受一个整数:

public ArrayList(int initialCapacity)

与 C++ 中的 不同,该构造函数是会预分配空间的,而不是直接添加元素:

ArrayList arr = new ArrayList<>(10);
System.out.println(arr.size()); // 0