Как инициализировать 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 ) ). Однако это особые случаи.