Как инициализировать std:: vector в конструкторе класса В C++?
как инициализировать std:: vector в конструкторе класса в c++?
class MyClass
{
public:
MyClass( int p_Var1, int* p_Vector ) : Var1( p_Var1 ) //, Initialize std::vector - MyVector with p_Vector
{
};
~MyClass( void );
private:
int Var1;
std::vector< int > MyVector;
};
1 ответов
во-первых,myVector
будет инициализирован, даже если вы ничего не делаете ,
поскольку он имеет нетривиальные конструкторы. Если хочешь ...
инициализируйте его, указав указатель на последовательность int
, вы будете
также нужно знать длину. Если у вас есть указатель и
длина, вы можете сделать:
: myVector( pInitialValues, pInitialValues + length )
альтернативно (и более идиоматически), вы позволите вызывающему абоненту сделать добавление и конструктор принимают два указателя, начало и конец:
: myVector( pBegin, pEnd )
(если вызывающий абонент используя C++11, он может получить их из
массив стиля C с использованием std::begin()
и std::end()
.)
EDIT:
просто чтобы было совершенно ясно: просто int*
не дает
достаточно информации, чтобы сделать что-нибудь. Ан int*
указывает на
первый элемент массива стиля C; вам также нужен какой-то способ
поиск конца: количество элементов, указатель конца и т. д. В
в особых случаях могут использоваться другие методы; т. е. если стиль C
массив содержит только неотрицательные числа, которые можно использовать -1
as
часовой, и что-то вроде : myVector( pVector, std::find(
pVector, NULL, -1 ) )
. Однако это особые случаи.