は、コンパイラが存在しないVi
をという名前の変数にこれを評価するので、あなたは、Vi.size()
で変数名のためにその値にi
を評価別名、その特定の方法で行うことをしようとしている何をする方法はありません。
for (auto* v : {&V1, &V2, &V3}) { std::cout << v->size() << std::endl; }
:
クレジットこの1(おそらく最良のオプション)のため@ kerrek-SBへ:他の人が指摘しているようしかし、あなたは違っこれを行うことができますが、それでも同じ結果を得る、ここではいくつかの例であり、 :すでにベクトル(マイナス面を作成するためのポインタの配列を使用して
const int size = 3; // Or whatever size you want
// needs to be const because c++11 and up don't support variable length arrays(VLAs)
std::vector<int> V[size];
V[0].push_back(0); // Appends integer to vector
V[0].push_back(10);
V[1].push_back(1);
V[2].push_back(2);
for (int i = 0; i < size; i++) {
std::cout << V[i].size() << std::endl;
} // OUTPUT:
// 2
// 1
// 1
:;:配列(:あなたの目的のために、簡単な示すように逆さまあなたは、動的割り当てとコピーを使用する必要が複数のベクトルを追加するにはマイナス面)を使用して、
あなたは動的割り当てを使用してサイズを変更する必要がありますf配列。逆さま:あなたは、関数にベクトルを渡すと、このようにそれらにアクセスすることができます(:あなたはpush_back
(追加することができます)あなたが作成した後、好きなだけ多くのベクトルの逆):
ベクトルのベクトルを使用して
const int size = 3;
std::vector<int> V1(10); // Create three vectors of different sizes
std::vector<int> V2(12);
std::vector<int> V3(14);
std::vector<int> *V[size]; // Create an array of 3 vector<int> pointers
V[0] = &V1; // Set each element to it's corresponding vector
V[1] = &V2;
V[2] = &V3;
for (int i = 0; i < size; i++) {
std::cout << V[i]->size() << std::endl;
} // OUTPUT:
// 10
// 12
// 14
int size = 3; // Or whatever size you want
std::vector<std::vector<int>> V(0);
for (int i = 0; i < size; i++) {
V.push_back(std::vector<int>((i+1)*2)); // (0+1)*2; (1+1)*2; (2+2)*2
}
for (int i = 0; i < V.size(); i++) {
std::cout << V[i].size() << std::endl;
} // OUTPUT:
// 2
// 4
// 6
また、ベクトルの可変サイズと、他の場所から既に作成されたベクトルを渡すことができるベクトルへのポインタベクトルのベクトルを作成することもできます。
ベクトルの配列またはベクトル(入れ子配列)の作成を検討してください。そうでなければ、マクロは関与する必要があります –
'for(auto * v:{&V1、&V2、&V3})はどうですか?{cout << v-> size()<< endl; } '? [デモ](https://ideone.com/6wf6Wo) –