Идентификация положения в двумерном векторе C ++ - PullRequest
0 голосов
/ 12 октября 2018

Я действительно борюсь с векторами.Хотя я мог сделать это в массиве, мне нужно иметь возможность передавать свою сетку в функцию без постоянных строк и столбцов.

    for (row = matrix.begin(); row != matrix.end(); ++row)
{
    for (col = row->begin(); col != row->end(); ++col)
    {
        //I need to do stuff like if (matrix[row-1][col+1] == blah)
    }
}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

std :: vector поддерживает индексирование, поэтому вам не нужно использовать итераторы.Вы можете сделать что-то вроде этого:

std::vector<std::vector<int>> matrix; 
std::vector<int> row;
row.push_back(1);
row.push_back(2);
matrix.push_back(row);
for (int row = 0; row < matrix.size(); ++row) {
    for (int col = 0; col < matrix[row].size(); ++col) {
        std::cout << matrix[row][col] << std::endl;
    }
}
0 голосов
/ 12 октября 2018

Вы можете использовать функции из <iterator>, чтобы найти соседние элементы

#include <iterator>

auto prev_row = std::prev(row);
auto next_row = std::next(row);

Аналогично

auto prev_cell = std::prev(col);
auto next_cell = std::next(col);

Просто будьте осторожны с начальными и конечными значениями цикла, чтобы выне выходить за пределы, т.е. убедитесь, что std::prev не идет до begin() и убедитесь, что std::next не продвинет вас к end().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...