10000 int
s will not be copied. Dereferencing is very cheap.
To make it clear you can rewrite
int a = (*vecPtr)[i];
as
vector<int>& vecRef = *vecPtr; // vector is not copied here
int a = vecRef[i];
In addition, if you are afraid that the whole data stored in vector
will be located on the stack and you use vector<int>*
instead of vector<int>
to avoid this: this is not the case.
Actually only a fixed amount of memory is used on the stack (about 16-20 bytes depending on the implementation), independently of the number of elements stored in the vector
.
The vector
itself allocates memory and stores elements on the heap.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…