我们如何在C++的类构造函数中初始化std :: vector?

CLe*_*ner 7 c++ constructor stdvector

我们如何在c ++中的类构造函数中初始化std :: vector?

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;
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 11

首先,myVector即使你什么都不做,也会被初始化,因为它有非平凡的构造函数.如果你想在给定指向序列的指针的情况下初始化它int,你还必须知道它的长度.如果你有一个指针和长度,你可以这样做:

: myVector( pInitialValues, pInitialValues + length )
Run Code Online (Sandbox Code Playgroud)

或者(并且更具惯用性),您将让调用者执行添加,并让构造函数采用两个指针,即开始和结束:

: myVector( pBegin, pEnd )
Run Code Online (Sandbox Code Playgroud)

(如果调用者正在使用C++ 11,他可以使用std::begin()和从C样式数组中获取这些std::end().)

编辑:

只是为了说清楚:只是一个int*没有提供足够的信息来做任何事情.一个int*点,一个C风格阵列的第一元件; 你还需要一些方法来找到结尾:元素计数,结束指针等.在特殊情况下,可以使用其他技术; 也就是说,如果C样式数组只包含非负数,你可以使用它-1作为一个sentinal,等等: myVector( pVector, std::find( pVector, NULL, -1 ) ).然而,这些是特殊情况.