vector宣言時の長さプリセット
4220 ワード
vector宣言時の長さプリセットメソッド1はvectorのメンバー関数reserveを用いて実現される.クラスの宣言ではreserve関数を直接呼び出すことはできません.宣言時にメモリが割り当てられていないため、関数操作はできません.クラスの構造関数で実現できます. 法2の最も簡単な方法はvectorを使用するときに関数を構築することによって実現される.次はvectorコンテナクラスの5つの一般的な構造関数です.
なお、方法2を用いてvectorによる2次元配列の構造を実現することも可能であり、以下はコード例である.
実現したのは3×4の2 D配列.構築プロセスは次のとおりです.2 Dベクトル2 D_を作成します.arrayは、3つの要素を含み、各要素はint型要素のベクトルを4つ含む.コンパイラがvectorを2回呼び出したコンストラクタ構築オブジェクト2 D_Arrayは、構造関数を初めて呼び出して、0を4つ含む無名のvectorオブジェクトを構築しました.
[0]
[1]
[2]
[3]
0
0
0
0
2回目の呼び出しコンストラクション関数はvectorの3つの要素を無名のvectorオブジェクトで初期化します.メソッド3一部のコンテナでは事前に長さを予め設定できない場合があり、再使用可能な場合は判断文を加えることができます.
PS:メソッド2を用いるvectorの長さを予め設定する場合、メカニズムは空間を割り当てて0に初期化する.すなわち、メソッド2の使用後、そのメンバ関数empty()を使用する場合、vectorは常に満タンである、vector.empty()はずっと1.具体的な応用シーンでは,この方法では判断できない.
//
class Foo
{
public:
vector<int> init_vec;
Foo();
~Foo();
};
//
Foo::Foo(){init_vec.reserve(3)} // init_vec 3 ---- 1
//vector
// 0. Create an empty vector v0
std::vector<int> v0;
// 1. Create a vector v1 with 3 elements of default value 0
std::vector<int> v1(3);
// 2. Create a vector v2 with 5 elements of value 2
std::vector<int> v2(5, 2);
// 3. Create a vector v3 with 3 elements of value 1 and with the allocator of vector v2
std::vector<int> v3(3, 1, v2.get_allocator());
// 4. Create a copy, vector v4, of vector v2
std::vector<int> v4(v2);
// 5. Create a vector v5 by copying the range v4[_First, _Last)
std::vector<int> v5(v4.begin() + 1, v4.begin() + 3);
なお、方法2を用いてvectorによる2次元配列の構造を実現することも可能であり、以下はコード例である.
std::vector> 2D_array(3,vector(4));
実現したのは3×4の2 D配列.構築プロセスは次のとおりです.2 Dベクトル2 D_を作成します.arrayは、3つの要素を含み、各要素はint型要素のベクトルを4つ含む.コンパイラがvectorを2回呼び出したコンストラクタ構築オブジェクト2 D_Arrayは、構造関数を初めて呼び出して、0を4つ含む無名のvectorオブジェクトを構築しました.
[0]
[1]
[2]
[3]
0
0
0
0
2回目の呼び出しコンストラクション関数はvectorの3つの要素を無名のvectorオブジェクトで初期化します.
//
int main()
{
std::queue<int> init_que;
for(int i=0;i<10;i++)
{
init_que.push(i);
if(init_que.size() == 8) // init_que 8
{
break;
}
}
}
PS:メソッド2を用いるvectorの長さを予め設定する場合、メカニズムは空間を割り当てて0に初期化する.すなわち、メソッド2の使用後、そのメンバ関数empty()を使用する場合、vectorは常に満タンである、vector.empty()はずっと1.具体的な応用シーンでは,この方法では判断できない.