1

多次元を使用してvector、行と列の値を変更しようとしていました。

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

void changerow(vector<vector<int> > A, int row, int M, int P){
    for(int j = 0; j < M; j++){
        (A[row - 1])[j] = ((A[row - 1])[j] + P) % 10;

    }
}

void changecolumn(vector<vector<int> > A, int column, int N, int P){
    for(int i = 0; i < N; i++){
        (A[i])[column - 1] = ((A[i])[column - 1] + P) % 10;
    }
}

int main(int argc, char* argv[])
{
    int T, N, M;
    cin >> T >> N >> M;
    if((T >= 1 && T <= 10) && (M >= 1 && M <= 100) && (N >= 1 && N <= 100)){
        // Logic of the program
        vector<vector<int> > A(N, vector<int>(M));

        for(int i = 0; i < N ; i++){
            for(int j = 0; j < M; j++){
                cin >> (A[i])[j];
            }
        }
        changerow(A,2,M,3);
        for(int i = 0; i < N ; i++){
            for(int j = 0; j < M; j++){
                cout << A[i][j];
            }
        }
    }
    return 0;
}

ベクトルのローカルコピーのみが渡されるため、要素を変更するためにベクトルのアドレスを渡す方法がわかりません。私は現在読んでThinking in C++ Volume 1いますが、詳細ではありません。vectorC++ での sの使用を学習するための良い情報源を教えてください。

4

1 に答える 1

2

現在、ベクトルを値で渡しています。つまり、呼び出し先はベクトルのコピーを取得します。

呼び出し先が行った変更を呼び出し元に表示したい場合は、ベクトルを参照渡しする必要があります。これは次のように行われます。

void changecolumn(vector<vector<int> >& A, int column, int N, int P){
                                      ^ THIS

議論については、参照渡し / C++ の値を参照してください。

于 2013-03-23T08:19:00.580 に答える