2013-11-01 52 views
0

我到目前爲止一直能夠使用一維向量,添加或刪除元素與推/回彈。 但是,當試圖填充應該表示矩陣的二維矢量時,我遇到了問題。我無法使用這些功能與我的2D矢量。當代碼編譯並運行時,我得到了要求維度的位,然後它要求第一個元素[1,1],對於輸入的任何值,我都會得到「分段錯誤:核心轉儲」。我不知道發生了什麼,一直在試圖修改我的代碼,但沒有取得很大的成功,因此互聯網在給出如何填寫這些該死的東西的簡單指南方面也沒有什麼用處...... 謝謝非常!如何添加項目到二維動態矢量

這裏是我的代碼

#include <iostream> 
#include <vector> 
using namespace std; 

vector<vector<double> > readMatrix(); 

int main() 
{ 
    vector<vector<double> > matrix1 = readMatrix(); 

    vector<vector<double> > matrix2 = readMatrix(); 

} 

vector<vector<double> > readMatrix() 
{ 
    cout << "Entering a matrix" << endl; 
    cout << "Number of Lines : "; 
    int numberOfLines; 
    cin >> numberOfLines; 
    cout << "Number of Columns :"; 
    int numberOfColumns; 
    cin >> numberOfColumns; 
    vector<vector<double> > matrix; 
    int i(0); 
    int j(0); 

    while(i<=numberOfLines && j<=numberOfColumns) 
    { 
     cout << "[" << i+1 << "," << j+1 << "] =" ; 
     int value; 
     cin >> value; 
     matrix[i].push_back(value); 
     cout << endl ; 
     j++; 
     if(j==numberOfColumns) 
     { 
      j=1; 
      i++; 
     } 
    } 

    return matrix; 
} 
+1

不應該有s.th.像'matrix [i] [j] = value;' –

+0

@ g-makulik如果它是一個3D矩陣就可以工作,問題是關於2D矩陣。 –

+1

矢量矢量只是一個矢量。所以填充它就像你會一維矢量。除了放入矢量。 – juanchopanza

回答

0

聲明矩陣是這樣的:

vector<vector<double> > matrix (y, vector<double> (x, 0)); 

現在你有一個Y * X矩陣。如果您想使用push_back,則必須在新行開始時聲明x向量。

0

當你做vector<vector<double> > matrix;初始化向量的載體,無論大小0(這是默認值),所以當你做,即使你i==0訪問內存,你還沒有被分配matrix[i].push_back(value)。它的更好,如果你喜歡這個預分配內存:

vector<vector<double> > matrix(numberOfLines,vector<double>(numberOfColumns)); 然後你不必推回或任何東西,你只是做matrix[i][j]=whatever

0

在C++中,你可以使用矢量構造函數來自動定義尺寸:
vector<vector<double> > matrix(numberOfLines, vector<double>(numberOfColumns, 0));
有了載體,環比while循環,因爲大小總是已知的更好。我建議你遍歷向量的行和列與這些

0

你需要做的是這樣(和刪除您的push_back陳述。):

matrix.resize(...); 
. 
. 
. 
matrix[i].push_back(...); 

這裏的問題是,你沒有兩三維矢量。你有一個向量,雙向的矢量。您需要在第一個向量中放入一些向量,如上所述調用resize()是一種方法。您也可以將初始大小傳遞給構造函數,您可以逐個推送向量 - 儘管這可能會帶來性能問題。