一個天真的解決辦法是定義自己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;
。您必須使用圓括號運算符,因爲方括號運算符必須始終採用一個參數,因此在此不適用。
我在代碼中看不到任何'[]'... – 2012-03-29 20:53:41
您需要重載的地方在哪裏?我沒有看到任何'[]'需要。 – Hauleth 2012-03-29 20:54:06
最後一塊應該是不同的? – 2012-03-29 20:54:48