2

I want to create a program that create N matrix due the user input, but i need to return the vector(or array) values and then send them to a function, and again, get by return a vector.

For example:

vector<int> createMatrix(rows, cols){
    for(int x = 0; x < rows; x++){
        for(int y = 0; y < cols; y++){
            cout << "Please, input the values for the row " << x << " and col " << y << endl;
            vector<int> Matrix(...)values;
            cin >> (...);
        }
    }
return Matrix; //here is the point
}

vector<int> mathOperations(operation, matrixA, matrixB){
    (...)
    return vector<int> resultMatrix;
}

int main(int argc, char *argv[]){
    int nMatrix, nRows, nCols;
    cout << "Please, answer how many matrix would you like do be created?" << endl;
    cin >> nMatrix;
    cout << "Thank you, and how many rows your matrix will have?" << endl;
    cin >> nRows;
    cout << "Thank you again, and how many cols?" << endl;
    cin >> nCols;
    cout << "Okey, creating " << nMatrix << " nMatrix for you!" << endl;

    for(int n = 0; n < nMatrix; n++){
        cout << "Please, insert the values for the matrix no" << n+1 << endl;
        vector<int> myMatrix[n] = createMatrix(nRows, nCols);
    }

    /* the rest of my code with functions to print values, create a new vectors by math operations between given arguments
    */

return 0;
}

What is the best way to do this?

1 Answer 1

3

If you're looking for a way to construct 2-dimentional structure using vector, use something like this:

#include <vector>
#include <iostream>

using std::vector;
using std::cout;
using std::cin;

typedef vector<vector<int> > matrix_t;

matrix_t createMatrix(int rows, int cols){
  matrix_t Matrix(rows, vector<int>(cols));

  for(int x = 0; x < rows; x++){
    for(int y = 0; y < cols; y++){
      cout << "Please, input the values for the row "
        << x << " and col " << y << std::endl;
      cin >> Matrix[x][y];
    }
  }
  return Matrix;
}

int main(int argc, char const* argv[])
{
  matrix_t M(createMatrix(2, 2));

  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      cout << M[i][j] << std::endl;
    }

  }

  return 0;
}
Sign up to request clarification or add additional context in comments.

3 Comments

@juanchopanza, yes, reserve doesn't change vector's size, so I need resize. Fixed the answer
OK, I will remove the comments now. BTW. you can skip the resize loop by initializing the vector like this: matrix_t Matrix(rows, vector<int>(cols));. See my answer to this old question.
@juanchopanza, ah, indeed, we can pass a vector as initial item value.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.