所以我最近开始学习C ++,并且我试图弄清楚如何访问多维向量或带有存储在其中的向量的向量。我看了一遍,我找不到我正在寻找的东西。我希望能够通过打印它们来测试多维向量内的每个向量的内容。每当我在每次迭代后尝试查看向量的大小时,我都会得到每次迭代的随机常量。他们看起来可能是记忆位置,但我不确定。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int numofArrays;
int numofQueries;
vector<vector<int>> arr(numofArrays);
cin >> numofArrays;
cin >> numofQueries;
int arrSize;
int number;
vector<int> indArr;
// Outer loop, appends vectors containing ints to a multidimensional vector
for (int i = 0; i < numofArrays; i++) {
cin >> arrSize; // Getting number of elements from user
// Inner loop, gets user inputted values then creates a vector which is added to the multidimensional vector
for (int x = 0; x < arrSize; x++) {
cin >> number;
indArr.push_back(number);
cout << "Last number added to vector: " << number << endl; // Checking to see if correct numbers are being added.
}
arr.push_back(indArr);
cout << "Multidimensional Vector size: " << arr.size() << endl; // Checking size of vector after each iteration
indArr.clear(); // Empties vector for next iteration
}
return 0;
}
由于我对C ++很陌生,我欢迎建设性的批评。
新修订的代码:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int numofArrays;
int numofQueries;
cin >> numofArrays;
cin >> numofQueries;
vector<vector<int>> arr(numofArrays);
// Outer loop, appends vectors containing ints to a multidimensional vector
for (int i = 0; i < numofArrays; i++) {
int arrSize;
vector<int>indArr;
cin >> arrSize; // Getting number of elements from user
indArr.resize(arrSize); // Resizing array for next values
// Inner loop, gets user inputted values then creates a vector which is added to the multidimensional vector
for (int x = 0; x < arrSize; x++) {
int number;
cin >> number;
indArr.push_back(number);
cout << "Last number added to vector: " << number << endl; // Checking to see if correct numbers are being added.
}
arr.push_back(indArr);
cout << "Multidimensional Vector size: " << arr.size() << endl; // Checking size of vector after each iteration
}
int test = arr[0][0];
cout << test;
return 0;
}
答案 0 :(得分:1)
一些提示:
vector<vector<int>> arr(numofArrays);
构造大小为numofArrays
的向量的向量。但是numofArrays尚未从cin中读取,因此它是一个未定义的数字。关心操作顺序。
arr.push_back(indArr);
在arr。
因此,在你的循环中,即使你修改了阅读numofArrays
的顺序并声明arr
,你也可以从一个大小为numofArrays
的数组开始,每个循环都添加一个元素。你最终将持有2次numofArrays
元素。
此外,indArr
是一个临时变量,您可以重置每个循环。尽管您正在做的事情没有任何问题,但通常最好将每个变量限制在其范围内。如果在循环内定义indArr
,它将自动清除并重新创建。在所有情况下,这可能不是最有效的方法,但我会留下这些细节以供日后使用。
这样的事情对你有用:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int numofArrays;
int numofQueries;
cin >> numofArrays;
cin >> numofQueries; // this is an unused variable
vector<vector<int> > arr;
// Outer loop, set vectors containing ints to a multidimensional vector
for (int i = 0; i < numofArrays; i++) {
int arrSize;
vector<int> indArr;
cin >> arrSize; // Getting number of elements from user
// Inner loop, gets user inputted values then creates a vector which is added to the multidimensional vector
for (int x = 0; x < arrSize; x++) {
int number;
cin >> number;
indArr.push_back(number);
cout << "Last number added to vector: " << number << endl; // Checking to see if correct numbers are being added.
}
arr.push_back(indArr);
cout << "Multidimensional Vector size: " << arr.size() << endl; // Checking size of vector after each iteration
}
return 0;
}
答案 1 :(得分:1)
您检查尺寸的方式是正确的。例如,在您的代码中,您将在数组arr
的第一维中打印整数个元素。
您获得的奇怪结果是因为您正在初始化矢量。在arr
的构造函数中,指定一个大小,描述用于填充向量的默认构造元素的数量。但是,您提供的numofArrays
是未定义的值。因此,当您打印出来时,您会收到随机查看的矢量大小。
由于arr
操作,向量push_back
的第一个维度的实际大小将是此未定义值加1的实际大小。