多维向量?

时间:2017-07-25 21:04:04

标签: c++ multidimensional-array vector

所以我最近开始学习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;
}

2 个答案:

答案 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的实际大小。