Другие языки программирования и технологии

Как пользоваться двумерными векторами?

Например, как заполнить двумерный вектор по какими-нибудь числами и чтобы при выводе они стояли в строки?
Работаю на с++.
Mydar Annakulyyew
Mydar Annakulyyew
108
Вариантов всяких тьма, исходя из возможностей задания, инициализации и редактирования самого вектора. Например, "самостоятельное" задание матрицы:
std::vector<std::vector<int>> v = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8} };

Ввод размеров матрицы с клавиатуры и создание матрицы размером n x m, где все элементы - нули:
size_t n, m;
std::cin >> n >> m;
std::vector<std::vector<int>> v(n, std::vector<int>(m, 0));

Заполнение изначально пустой матрицы "на ходу":
std::vector<std::vector<int>> v;

for (size_t i = 0; i < n; ++i) {
std::vector<int> row; // Создаём пустой текущий ряд
for (size_t j = 0; j < m; ++j) {
int item;
std::cin >> item; // Считываем очередной элемент с клавиатуры
row.push_back(item); // Кладём элемент в конец текущего ряда
}
v.push_back(row); // Кладём заполненный текущий ряд в конец матрицы
}

Варианты вывода, в отличие от вариантов ввода, менее разнообразны. Например, как и с обычными массивами (если не знаем размер вектора, можно его получить, вызвав метод size):
for (size_t i = 0; i < v.size(); ++i) {
for (size_t j = 0; j < v[i].size(); ++j)
std::cout << v[i][j] << ' ';
std::cout << std::endl;
}

Вариант с выводом в range-based for:
for (auto& row : v) {
for (auto& item : row)
std::cout << item << ' ';
std::cout << std::endl;
}

Вывод через итераторы:
for (auto rowIt = v.begin(); rowIt < v.end(); ++rowIt) {
for (auto colIt = rowIt->begin(); colIt < rowIt->end(); ++colIt)
std::cout << *colIt << ' ';
std::cout << std::endl;
}
Юрий Догадин
Юрий Догадин
20 861
Лучший ответ
Mydar Annakulyyew Я не понимаю только для чего в строке:
std::vector<std::vector> v(n, std::vector(m, 0));
vector находится в параметрах вектора?
vector < vector < int > >
Mydar Annakulyyew Мне интересно как там по мерностям ориентироваться.