我想通过迭代使用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,以便我的编译器知道它是我的循环的整数。
提前感谢。
答案 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
你也可以做一个指向矢量的指针向量,它既可以给你一个向量的可变大小,也可以传递已经从其他地方创建的向量。