Eine naive Lösung wäre, definieren Sie Ihre eigene operator[]
:
class example
{
std::vector<std::vector<int>> v;
public:
std::vector<int> const & operator[](std::size_t i) const { return v[i]; }
std::vector<int> & operator[](std::size_t i) { return v[i]; }
// ...
};
Nun, wenn Sie example e;
haben, dann e[1]
ist ein Vektor von Ints usw.
Es sieht aus wie Sie einige schreiben wollen Matrixklasse, obwohl. Dafür ist es effizienter, nur einen einzigen Vektor zu haben und darauf zuzugreifen in Schritten:
class Matrix
{
std::size_t cols;
std::size_t rows;
std::vector<int> v;
public:
explicit Matrix(std::size_t r, std::size_t c) : cols(c), rows(r), v(r*c) { }
int operator()(std::size_t i, std::size_t j) const { return v[i * cols + j]; }
int & operator()(std::size_t i, std::size_t j) { return v[i * cols + j]; }
};
Jetzt können Sie sagen: Matrix m(4, 7); m(1, 3) = 8;
. Sie müssen dazu den runden Klammeroperator verwenden, da der eckige Klammeroperator immer exakt ein Argument nehmen muss und somit hier nicht geeignet ist.
Ich sehe keine '[]' in Ihrem Code ... –
Wo ist Ihre Überlastung? Ich habe keine '[]' benötigt. – Hauleth
Sollte der letzte Block irgendwie anders sein? –