Если вы хотите использовать vector<vector<T>>
для этого, то вы можете перемещаться только в одном заказе. Обратите внимание, что это не строка-за-строкой, а столбцом-по-столбцу, а на самом деле вектор-по-вектору. Каждый суб-вектор имеет хранилище, выделенное полностью независимо от другого вектора и может быть даже разной длины, поэтому его трудно назвать «строкой».
Если вам нужна матрично-подобная (тензорная, как правило,) память, вам следует рассмотреть возможность использования некоторой библиотеки, которая обеспечивает (например, STL), например OpenCV, или обертывание единственного смежного vector
в ваш собственный класс, который делает индексирование.
struct Matrix {
std::vector<bool> storage;
int ncols;
Matrix(int nrows, int ncols) : storage(nrows * ncols), ncols(ncols) {}
bool& operator[](int row, int col) {
return storage[row * ncols + col];
}
};
Затем вы можете перемещаться с помощью простых for
петель или писать свои собственные итераторы.
Если это слишком много работы, вы можете придерживаться vector<vector<bool>>
но использовать operator[]
вместо итераторов:
for (int col = 0; col < nCols; ++col) {
for (int row = 0; row < nRows; ++row) {
bool& el = vvi[row][col];
// do stuff on el
}
}
Возможно, вы не можете использовать итераторы для этого (если вы не пишете свой собственный), а индексирование через индекс должен работать ('vvi [row] [col]') – Zereges
Подождите 'int' или' bool'? – Barry
Поверните матрицу? –