1️⃣Matrix-bidimensionali [14]

Implementare una classe template per la rappresentazione di matrici bidimensionali. Implementare costruttore per copia e operatore di assegnazione, oltre a metodi per impostare e leggere valori a determinate coordinate. Scrivere anche un costruttore che prenda in ingresso dimensioni e valore di default degli elementi della matrice.

Risposta

prima piango per 10 minuti buoni... poi:

#include <iostream>
#include <vector>

template <typename T>
class Matrix {
private:
  std::vector<std::vector<T>> data; // Matrice bidimensionale rappresentata come vettore di vettori

public:

  // Costruttore con dimensioni e valore di default
  Matrix(int rows, int cols, T defaultValue) {
    data.resize(rows);
    for (int i = 0; i < rows; ++i) {
      data[i].resize(cols, defaultValue);
    }
  }

  // Costruttore di copia
  Matrix(const Matrix& other) {
    data = other.data;
  }

// Impostare un valore in una cella specifica
  void set(int row, int col, T value) {
    if (row >= 0 && row < rows && col >= 0 && col < cols) {
      data[row][col] = value;
    } else {
      std::cerr << "Errore: Indici fuori dai limiti della matrice" << std::endl;
    }
  }

// Leggere un valore da una cella specifica
  T get(int row, int col) const {
    if (row >= 0 && row < rows && col >= 0 && col < cols) {
      return data[row][col];
    } else {
      std::cerr << "Errore: Indici fuori dai limiti della matrice" << std::endl;
      return 0; // Valore di default in caso di errore
    }
  }
};

main:

Matrix<int> matrice(3, 2, 0); // Matrice 3x2 con valori di default 0

matrice.set(1, 0, 5); // Imposta il valore 5 nella cella (1, 0)
int valore = matrice.get(2, 1); // Legge il valore dalla cella (2, 1) e lo assegna a 'valore'

matrice.print(); // Stampa la matrice a console

Last updated