2013-03-23 5 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, но это не сложно. Пожалуйста, дайте мне знать хороший источник для изучения использования vector s в C++.

ответ

2

В настоящее время вы передаете вектор по значению, что означает, что вызываемый получает копию вектора.

Если вы хотите, чтобы вызываемый вызывал изменения, которые вызывают вызывающий, вам необходимо передать вектор по ссылке. Это делается так:

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

Для обсуждения см Pass by Reference/Value in C++

+0

Я знал, что понятие референции, но я не знаю синтаксис для использования с 'VECTOR'. Можете ли вы также рекомендовать какой-либо источник для обучения векторам? –

+0

@mozart: Мне понравился Accelerated C++, когда он вышел, но я полагаю, что он немного устарел. Я не уверен, какие там текущие вступительные книги. – NPE

+0

@mozart, «Эффективный STL» Скотта Мейерса - отличный источник информации о стандартной библиотеке C++, включая векторы. Иногда это немного сложно, но если вы сражаетесь, вы будете знать все, что вам нужно. – Steed

Смежные вопросы