あなたはこれをひどく考えすぎています。ベクトルは 4 つしかありません。3 つの比較を使用して、最大のベクトルを決定できます。それを行うだけです:
std::vector<blah>& max = vector1;
if (max.size() < vector2.size()) max = vector2;
if (max.size() < vector3.size()) max = vector3;
if (max.size() < vector4.size()) max = vector4;
編集:
今ポインタで!
編集 (280Z28):
今すぐ参照してください!:)
編集:
参照のあるバージョンは機能しません。Pavel Minaev は、コメントでそれをうまく説明しています。
そうです、コードは参照を使用します。max を宣言する最初の行では、コピーは行われません。ただし、次のすべての行ではコピーが発生します。これmax =
vectorN
は、 max が参照の場合、参照が別のベクトルを参照する原因にはならないためです (一度初期化すると、別のオブジェクトを参照するように参照を変更することはできません)。代わりに、 と同じで
max.operator=(vectorN)
、単純vector1
に がクリアされ、 に含まれる要素が
vectorN
コピーされて置き換えられます。
ポインター バージョンはおそらく最善の策です。これは、高速で、低コストで、シンプルです。
std::vector<blah> * max = &vector1;
if (max->size() < vector2.size()) max = &vector2;
if (max->size() < vector3.size()) max = &vector3;
if (max->size() < vector4.size()) max = &vector4;