文法:
#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 );
最後のコンストラクタはstartとendの間の要素を持つように初期化されたベクタを生成します。例えば:
// ランダムな整数のベクタを生成 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で走ります。
ベクタが破壊されるとき、デフォルトデストラクタがそれぞれの要素について呼ばれます。