Пожалуйста, смотрите 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
, Но как мне сбросить первый столбец?
Одним из способов является:
for (auto &row: a)
row[0] = 0;
Вектор векторов не имеет какой-либо конкретной структуры, кроме как вектор векторов, то есть нет встроенного способа получить представление о столбце. Если вы регулярно хотите сделать это, тогда подумайте об использовании (нестандартного) класса, который представляет матрицу.
В 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;
}
РЕДАКТИРОВАТЬ: Опечатки
for(int rw = 0;rw<ar.size();rw++)
a[rw][0] = 0;