Получить первое измерение в многомерном массиве

Пожалуйста, смотрите MWE:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector< vector<size_t> > a(2, vector<size_t>(3));
a[0][0] = 1;
a[0][1] = 1;
a[0][2] = 1;a[1][0] = 2;
a[1][1] = 2;
a[1][2] = 2;

fill(a[0].begin(), a[0].end(), 0);return 0;
}

Здесь я сбрасываю первую строку моей матрицы 2×3 на нулевое значение, используя fill, Но как мне сбросить первый столбец?

0

Решение

Одним из способов является:

for (auto &row: a)
row[0] = 0;

Вектор векторов не имеет какой-либо конкретной структуры, кроме как вектор векторов, то есть нет встроенного способа получить представление о столбце. Если вы регулярно хотите сделать это, тогда подумайте об использовании (нестандартного) класса, который представляет матрицу.

2

Другие решения

В C ++ у вас на самом деле нет матрицы, у вас есть вектор векторов, поэтому нет единой операции, которая может привести к нужному результату, так как вам нужно получить доступ к каждому отдельному вектору «столбца» при их изменении. ,
Вместо этого используйте цикл for.

for (int i = 0; i < a.size(); i++) a[i][0] = 0;

Вы также можете поместить его в вспомогательную функцию

void resetColumn(vector<vector<size_t>>& a, int col)
{
for (int i = 0; i < a.size(); i++) a[i][col] = 0;
}

и позвонить с вашего основного, когда вам нужно

int main()
{
vector< vector<size_t> > a(2, vector<size_t>(3));
a[0][0] = 1;
a[0][1] = 1;
a[0][2] = 1;a[1][0] = 2;
a[1][1] = 2;
a[1][2] = 2;

resetColumn(a, 1);return 0;
}

РЕДАКТИРОВАТЬ: Опечатки

2

for(int rw = 0;rw<ar.size();rw++)
a[rw][0] = 0;
0
По вопросам рекламы [email protected]