Перегрузка опертора [] c++ для создания двумерного массива

292
20 октября 2017, 14:38

Есть класс, который хранит в себе двумерный массив QVector(Аналог std::vector в Qt)

class Field : public QAbstractListModel
{
    Q_OBJECT
public:
    Field(int width = 0, int height = 0);
    QVector<int>& operator[](int n) {return (v_field.begin()[n]);}
private:
    int width, height;
    QVector< QVector<int> > v_field;
};

То как я перегрузил оператор [] видно в коде выше. Вопрос: как присвоить значение QVector< QVector > v_field, через экземпляр класса Field. Т.е. если сделать так:

field[0][0] = 0; // Экземпляр класса Field

А потом вывести

qDebug() << "<<<<<<<<<<" << this->field[0][0];

Получаю старое значение. Т.е. field[0][0] = 0 не меняет v_field. (А я хочу чтобы получилось аналогично v_field[0][0] = 0)

Answer 1
QVector<int>& operator[](int n) {return v_field[n];}
const QVector<int>& operator[](int n) const {return v_field[n];}

Возможно, также стоит добавить ассерты для проверки выхода за пределы вектора.

READ ALSO
помогите с с++ пж [требует правки]

помогите с с++ пж [требует правки]

Вставьте в двумерный массив столбец из нулей после столбца с номером KKВ первой строке даны числа NN, MM и KK (1≤N,M,K≤5001≤N,M,K≤500; K≤MK≤M) — количество...

328
Когда нужно вызывать GetExitCodeProcess

Когда нужно вызывать GetExitCodeProcess

Функцию GetExitCodeProcess нужно вызывать до, или после CloseHandle?

269
Нужен пример чата [требует правки]

Нужен пример чата [требует правки]

Нужен пример среднего чата без авторизации, Кто может посоветуете

244