Один наивный решение было бы определить свой собственный 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]; }
// ...
};
Теперь, если у вас есть example e;
, то e[1]
является вектором Интс и т.д.
Похоже, что вы хотите написать какой-нибудь матричный класс. Для этого, это более эффективно, чтобы иметь только один вектор и доступ к нему в махов:
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]; }
};
Теперь вы можете сказать: Matrix m(4, 7); m(1, 3) = 8;
. Для этого вам нужно использовать оператор круглой скобки, так как оператор квадратной скобки должен всегда принимать точно один аргумент и, следовательно, здесь не подходит.
Я не вижу никаких '[]' в вашем коде ... –
Где ваша перегрузка? Я не вижу никакого '[]' нуждающегося. – Hauleth
Был ли какой-то последний блок каким-то образом отличаться? –