我们如何在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;
};
答案 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 ) )
。然而,这些是特殊情况。