2017-07-25 91 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。