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

时间:2013-02-27 08:43:36

标签: 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;
};

1 个答案:

答案 0 :(得分:11)

首先,myVector将被初始化,即使你什么都不做, 因为它有非平凡的构造函数。如果你想 给出一个指向int序列的指针来初始化它,你会 也要知道长度。如果你有一个指针和 长度,你可以这样做:

: myVector( pInitialValues, pInitialValues + length )

或者(更具惯用性),你会让来电者这样做 添加,并有构造函数采取两个指针, 开始和结束:

: myVector( pBegin, pEnd )

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

编辑:

只是为了说清楚:只有一个int*没有提供 足够的信息做任何事情。 int*指向。{1} C风格数组的第一个元素;你还需要一些方法 找到结束:元素计数,结束指针等 特殊情况,可以使用其他技术;即如果是C风格 数组只包含非负数,您可以使用-1作为 一个哨兵,像: myVector( pVector, std::find( pVector, NULL, -1 ) )。然而,这些是特殊情况。