2017-07-25 93 views
-1

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

所有你需要做的是弄清楚如何使用一个向量,因为“多维向量”只是一个向量。 – juanchopanza

+0

但我之前使用过矢量,它的行为不像任何矢量。你能解释我做错了什么吗?为什么每当我打印出“cout <<”多维向量大小:“<< arr.size()<< endl; //每次迭代后检查向量的大小”这一行时,我都会收到一个超过4000000的数字? – King

+0

可能是你的代码中的一个无聊的东西。 – juanchopanza

回答

1

只是一些提示:

vector<vector<int>> arr(numofArrays);构造尺寸numofArrays的向量的向量。但是numofArrays还没有从cin中读取,所以它是一个未定义的数字。关心操作的顺序。

arr.push_back(indArr);在arr末尾添加一个向量。

因此,在你的循环,即使你修复的阅读numofArrays并宣布arr的顺序,你开始尺寸numofArrays的数组,每个循环添加的元素。你将以arr持有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; 
} 
+0

感谢提示,我使用了您的建议,并且每当我尝试打印时都收到分段错误其中一个值来自向量 – King

+0

我没有得到segfaults。你能发布有问题的代码吗? – user1620443

+0

也将使用numofQueries,但程序尚未结束。 – King

1

你检查大小的方法是正确的。例如,在您的代码中,您将在数组arr的第一维中打印整数个元素。

你得到的奇怪结果是因为你如何初始化矢量。在arr的构造函数中,您可以指定一个大小来描述用于填充矢量的默认构造元素的数量。但是,您提供的是numofArrays,这是一个未定义的值。因此,当您打印出来时,您会收到随机显示的矢量大小。

由于push_back的操作,矢量arr的第一维的实际尺寸将是无论这个未定义的值是加1。