1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| template <typename T>
class Matrix{
public:
Matrix(size_t lines, size_t rows, T defaultValue=T{}):
lines_{lines}, rows_{rows},datas_(lines*rows,defaultValue){
}
/* les accès aux différents éléments, en lecture seule et en écriture */
T operator()(size_t l, size_t r) const{
/* la valeur de l et de r doit être inférieure à la valeur respective de
* lines_ et de rows_.
* si ce n'est pas le cas, c'est une erreur de programmation qui devra
* être corrigée
*/
assert(l < lines_ && "lines index out of bound");
assert(r < rows_ && "rows index out of bound");
return datas_[l*rows_ + r];
}
T& operator()(size_t l, size_t r) {
/* la valeur de l et de r doit être inférieure à la valeur respective de
* lines_ et de rows_.
* si ce n'est pas le cas, c'est une erreur de programmation qui devra
* être corrigée
*/
assert(l < lines_ && "lines index out of bound");
assert(r < rows_ && "rows index out of bound");
return datas_[l*rows_ + r];
}
/* il est toujours intéressant de connaitre les limites */
size_t lines() const{
return lines_;
}
size_t rows() const{
return rows_;
}
private:
size_t lines_;
size_t rows_;
std::vector<T> datas_;
}; |