2017-04-14 19 views
0

forループを使用して異なるベクトルのサイズを反復処理で確認したいと考えています。 forループを使用して複数のベクトルを繰り返し処理する

#include <vector> 
#include <iostream> 

using namespace std; 

vector<int> V1; 
vector<int> V2; 
vector<int> V3; 

for (int i=0;i<3;i++){ 
    cout<<Vi.size()<<endl; 
} 

は、残念ながら、私はそれが、ベクトルの名前を反復処理することができますかどうかを知りませんし、それがある場合、どのように私のコンパイラは、それは私のループの整数であることを知っている私ようにパラメータを記述すること。

ありがとうございます。

+2

ベクトルの配列またはベクトル(入れ子配列)の作成を検討してください。そうでなければ、マクロは関与する必要があります –

+7

'for(auto * v:{&V1、&V2、&V3})はどうですか?{cout << v-> size()<< endl; } '? [デモ](https://ideone.com/6wf6Wo) –

答えて

0

は、コンパイラが存在しない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 

また、ベクトルの可変サイズと、他の場所から既に作成されたベクトルを渡すことができるベクトルへのポインタベクトルのベクトルを作成することもできます。