0

これまでのところ、1 次元ベクトルを使用して、プッシュ/ポップ バックで要素を追加または削除することができました。しかし、行列を表すはずの 2 次元ベクトルを入力しようとすると、問題が発生します。これらの機能を 2 次元ベクトルで使用できませんでした。コードがコンパイルおよび実行されると、次元を要求するビットを取得し、最初の要素 [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;
}
4

4 に答える 4

0

次のようなことをする必要があります:

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

ここでの問題は、2 次元のベクトルがないことです。ベクトル、ベクトル、ダブルスのベクトルがあります。最初のベクトルにいくつかのベクトルを配置する必要がありますresize()。上記のように呼び出すのが 1 つの方法です。コンストラクターに初期サイズを渡すこともできます。ベクトルを 1 つずつプッシュすることもできますが、パフォーマンスの問題が発生する可能性があります。

于 2013-11-01T14:40:48.747 に答える