2013-03-23 40 views
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,但没有详细说明。请让我知道在C++中学习使用vector的好资源。

回答

2

目前,您正在通过值传递向量,这意味着被调用者获取了该向量的副本。

如果您希望被调用者对调用者可见的更改,则需要通过引用传递向量。这是像这样做:

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

相关讨论,请参见Pass by Reference/Value in C++

+0

我知道的引用这个概念,但我不知道语法与'VECTOR'使用。你也可以推荐学习矢量的任何来源? – 2013-03-23 08:53:30

+0

@mozart:当它出来时,我喜欢加速的C++,但我想现在有点过时了。我不确定当前有哪些入门书。 – NPE 2013-03-23 09:03:31

+0

@mozart,Scott Meyers的“Effective STL”是C++标准库信息的重要来源,包括向量。有时候这有点困难,但如果你通过了,你会知道你需要的一切。 – Steed 2013-03-23 09:03:40