65.9K
CodeProject is changing. Read more.
Home

C++ Tip : Treating a Vector as an Array

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.25/5 (3 votes)

Jul 23, 2010

CPOL
viewsIcon

23901

Suppose you have a vector of int and function that takes int *. To obtain the address of the internal array of the vector v and pass it to the function, use the expressions &v[0] or &*v.front().
For example:
void func(const int arr[], size_t length );  
int main()  
{  
 vector <int> vi;  
 //.. fill vi  
 func(&vi[0], vi.size());  
} 
It is safe to use &vi[0] and &*v.front() as the internal array’s address as long as you adhere to the following rules:
  • func() shouldnot access out-of-range array elements.
  • the elements inside the vector must be contiguous. Although the C++ Standard doesnot guarantee that yet
However,I amn't aware of any implementation that doesn’t use contiguous memory for vectors. Furthermore, this loophole in the C++ Standard will be fixed soon.