как добавить число в столбец двумерного вектора
Имеется двумерный вектор
Заполняется случайными числами
После в функции SummColls выполняется вычисление суммы элементов в указанной колонке
Вопрос как добавить вычисленную сумму под столбец у которого она вычислялась ???
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class table
{
private:
vector<vector<int>> b;
int rows = 0;
int cols = 0;
int flag = 0;
public:
table(int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
b.push_back(vector<int>());
for (int j = 0; j < cols; j++)
{
b[i].push_back(1);
}
}
for (int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j ++)
{
b[i][j] = rand() % 10;
}
}
this->rows = rows;
this ->cols = cols;
}
void CreateIshodnFile()
{
ofstream file("ishodntable.txt");
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
file << b[i][j] << '\t';
}
file << endl;
}
}
void PrintTable()
{
if (flag = 0)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << b[i][j] << '\t';
}
cout << endl;
}
}
else
{
for (int i = 0; i < b.size(); i++)
{
for (int j = 0; j < b[i].size(); j++)
{
cout << b[i][j] << '\t';
}
cout << endl;
}
}
}
void SummCols(int num)
{
int summ = 0;
for (int i = 0; i < rows; i++)
{
summ += b[i][num];
}
cout << summ << endl;
}
};
int main()
{
setlocale(LC_ALL, "ru");
table a(3,4);
a.CreateIshodnFile();
a.PrintTable();
a.SummCols(1);
a.PrintTable();
return 0;
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Добавьте на одну строку больше, чем ваш исходный массив. Резервируйте память сразу под весь вектор (создавайте вектор сразу из нужного количества элементов). И сразу заполняйте случайными числами.
class table
{
private:
vector<vector<int>> b;
int rows = 0;
int cols = 0;
int flag = 0;
public:
// либо так
table(int _rows, int _cols) : rows(_rows), cols(_cols)
{
b = vector< vector<int> >(rows); // b создается с нужным количеством векторов
for (int i = 0; i < rows; i++)
{
b[i] = vector<int>(cols); // b[i] создается с нужным количеством элементов
for (int j = 0; j < cols; j++)
b[i][j] = rand() % 10;
}
b[rows] = vector<int>(cols); // строка для сумм
}
// либо так
table(int _rows, int _cols) : rows(_rows), cols(_cols)
{
// поскольку вы уже знаете размер, зарезервируйте размер вектора
b.reserve(rows + 1); // на одну строку больше
for (int i = 0; i < rows; i++)
{
b.push_back(vector<int>(cols));
for (int j = 0; j < cols; j++)
b[i][j] = rand() % 10;
}
b.push_back(vector<int>(cols)); // строка для сумм
}
};
В результате b[0] - b[rows-1] - это ваш массив, а b[rows] - последняя строка, куда можете записывать суммы.