使用for循环遍历多个向量

时间:2017-04-14 23:11:41

标签: c++ vector

我想通过迭代使用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;
}

不幸的是我不知道是否可以迭代矢量名称,如果是,如何编写参数i,以便我的编译器知道它是我的循环的整数。

提前感谢。

1 个答案:

答案 0 :(得分:0)

没有办法按照特定方式执行您尝试执行的操作,即将i评估为Vi.size()中变量名称的值,因为编译器将此值计算为一个名为Vi的变量,它不存在。但是,正如其他人指出的那样,你可以采用不同的方式做到这一点,但仍然得到相同的结果,这里有几个例子:

归功于@ kerrek-sb这个(可能是最好的选择):

for (auto* v : {&V1, &V2, &V3}) { std::cout << v->size() << std::endl; }

使用数组(缺点:添加更多向量,您必须使用动态分配和复制;上行:简单,如您所示):

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

使用已经创建的向量的指针数组(缺点:你必须使用动态分配来改变数组的大小;上行:你可以将向量传递给函数并像这样访问它们:

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

使用矢量矢量(上部:您可以push_back(追加)尽可能多的矢量&#39; s,因为您在创建后喜欢这样做:

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

你也可以做一个指向矢量的指针向量,它既可以给你一个向量的可变大小,也可以传递已经从其他地方创建的向量。