Categories
程式開發

C++中的vector和Java中的ArrayList的構造函數的區別


前言:之前一直存在一個理解誤區,以為C++中的vector存在一個構造函數可以為vector對象預分配空間,在調試代碼時,才發現是自己理解錯了,接收一個整數的vector的構造函數並不是預分配空間,而是直接添加了元素,因此寫一篇文章來記錄一下。

C++中的vector

接收一個整數的vector的構造函數實際上是直接向vector對像中添加了元素:

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

如果要給vector對象預分配空間的話,必須使用reserve()成員函數:

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

Java中的ArrayList

而Java中的ArrayList也有一個類似的構造函數,接收一個整數:

public ArrayList(int initialCapacity)

與C++中的vector不同,該構造函數是會預分配空間的,而不是直接添加元素:

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