как добавить число в столбец двумерного вектора

Имеется двумерный вектор

Заполняется случайными числами

После в функции 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] - последняя строка, куда можете записывать суммы.

→ Ссылка