ベクタコンストラクタ

提供:cppreference.com
移動: 案内, 検索

文法:

    #include <vector>
    using namespace std;
    vector();
    vector( const vector& c );
    explicit vector( size_type num, const T& val = T() );
    template< typename input_iterator >
    vector( input_iterator start, input_iterator end );
    ~vector();

デフォルトのベクタコンストラクタは引数を取らず、そのベクタの新しいインスタンスを生成します。

二番目のコンストラクタはデフォルトのコピーコンストラクタで、与えられたベクタcのコピーを生成します。

三番目のコンストラクタはnum個のオブジェクトを持つベクタを生成します。valが与えられた場合、それぞれのオブジェクトはその値で初期化され、それ以外の場合それらのオブジェクトはTのデフォルトコンストラクタで初期化されます。例えば、次のコードは整数42の5つのコピーを持つベクタを作ります:

   vector<int> v1( 5, 42 );

最後のコンストラクタはstartendの間の要素を持つように初期化されたベクタを生成します。例えば:

   // ランダムな整数のベクタを生成
   cout << "元のベクタ: ";
   vector<int> v;
   for( int i = 0; i < 10; ++i ) {
     int num = (int) rand() % 10;
     cout << num << " ";
     v.push_back( num );
   }
   cout << endl;
 
   // vの最初の偶数要素を探す
   vector<int>::iterator iter1 = v.begin();
   while( iter1 != v.end() && *iter1 % 2 != 0 ) {
     ++iter1;
   }
 
   // vの最後の偶数要素を探す
   vector<int>::iterator iter2 = v.end();
   do {
     --iter2;
   } while( iter2 != v.begin() && *iter2 % 2 != 0 );
 
   // 両方の数が見つかった場合のみ実行
   if( iter1 != v.end() && iter2 != v.begin() ) {
     cout << "最初の偶数: " << *iter1 << ", 最後の偶数: " << *iter2 << endl;
 
     cout << "新しいベクタ: ";
     vector<int> v2( iter1, iter2 );
     for( int i = 0; i < v2.size(); ++i ) {
       cout << v2[i] << " ";
     }
     cout << endl;
   }

このコードを動作させると、次の結果が表示されます:

   元のベクタ: 1 9 7 9 2 7 2 1 9 8
   最初の偶数: 2, 最後の偶数: 8
   新しいベクタ: 2 7 2 1 9

最後のコンストラクタはSTLベクタを古いスタイルの配列のデータで初期化する手軽な方法を提供してくれます。

例:

    float fp_values[] = { 0.1, 0.2 , 0.3, 0.4};      // どこかで配列が作られました
...
    vector<float> fp_vector(fp_values,fp_values+4); // 配列の中の要素はfp_vectorにコピーされました

ポインタはイテレータの可能な単純な形であるだけということを心に留めておいてください。

これら全てのコンストラクタは constant timeで走る最初のものを除いて linear timeで走ります。

ベクタが破壊されるとき、デフォルトデストラクタがそれぞれの要素について呼ばれます。

個人用ツール
名前空間
変種
操作
案内
ツールボックス
他の言語