8

我们如何在 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;
};
4

1 回答 1

12

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

: myVector( pInitialValues, pInitialValues + length )

或者(更惯用),您将让调用者进行加法,并让构造函数获取两个指针,一个开始和结束:

: myVector( pBegin, pEnd )

(如果调用者使用的是 C++11,他可以使用std::begin()and从 C 风格的数组中获取这些std::end()。)

编辑:

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

于 2013-02-27T08:50:43.063 回答