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 )

別の方法として (より慣用的に)、呼び出し元に加算を行わせ、コンストラクターに begin と end の 2 つのポインターを持たせることもできます。

: myVector( pBegin, pEnd )

std::begin()(呼び出し元が C++11 を使用している場合は、 andを使用して C スタイルの配列からこれらを取得できstd::end()ます。)

編集:

完全に明確にするために、 an だけでは何かを行うのint*に十分な情報が提供されません。Anint*は、C スタイルの配列の最初の要素を指します。また、要素数、終了ポインタなど、終了を見つける何らかの方法も必要です。特殊なケースでは、他の手法を使用できます。つまり、C スタイルの配列に負でない数値のみが含まれている場合は-1、センティナルとして使用できます: myVector( pVector, std::find( pVector, NULL, -1 ) )。ただし、これらは特殊なケースです。

于 2013-02-27T08:50:43.063 に答える