Что касается std::vector<int> vec
, vec для получения int*
, вы можете использовать два метода:
int * arr = & vec [0];
int * arr = vec.data ();
Если вы хотите преобразовать любой тип T
вектор в T* array
, просто замените int
на T
.
Я покажу вам, почему вышеупомянутые две работы, для хорошего понимания?
std::vector
по сути является динамическим массивом.
Основной элемент данных, как показано ниже:
template <class T, class Alloc = allocator<T>>
class vector{
public:
typedef T value_type;
typedef T* iterator;
typedef T* pointer;
//.......
private:
pointer start_;
pointer finish_;
pointer end_of_storage_;
public:
vector():start_(0), finish_(0), end_of_storage_(0){}
//......
}
range (start_, end_of_storage_)
- это вся память массива, выделенная вектором;
range(start_, finish_)
- это вся память массива, используемая вектором;
range(finish_, end_of_storage_)
- это память резервного массива.
Например, что касается вектора vec. указатель {9, 9, 1, 2, 3, 4} может выглядеть следующим образом.
![enter image description here](https://i.stack.imgur.com/yTkeA.png)
Итак &vec[0]
= start_ (address.) (Start_ эквивалентно int * заголовку массива)
В c++11
функция-член data()
просто возвращает start_
pointer data()
{
return start_; //(equivalent to `value_type*`, array head)
}