Есть ли способ выполнить математические операции над вектором векторов в C ++? - PullRequest
0 голосов
/ 03 мая 2020

Попытка использовать алгоритм банкира и попытка рассчитать потребность с помощью C ++. Я пытался заставить вектор Max / Allocation вычитать друг друга и, похоже, не могу получить правильный метод , используя математику для вектора векторов .

Предполагается, что вся программа для вывода Allocation / Max / Need, и я не смог найти в Интернете ресурсы по работе с 2D-векторами, которые требуются для этого кода. Я продолжу поиск в Интернете и вернусь, если найду что-либо, чтобы отредактировать или удалить это, но заранее благодарю за любую помощь, которую кто-либо может предоставить.

#include <iostream>
#include <fstream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

int main(int argc, char** argv)
{
    int m, n, q; 

    //vectors we're storing to
    vector<vector<int> > alloc;
    vector<vector<int> > max;
    vector<vector<int> > need;

    ifstream fin(argv[1]);

    fin >> n;
    fin >> m;

    cout << "There are " << m << " resource types.\n\n";
    cout << "There are " << n << " processes in the system.\n\n"; 

    //inserting the data into the Allocation Array
    for(int i=0; i<n; i++)
    {
        vector<int>temp;
        for(int j=0; j<m; j++)
        {
            fin >> q;
            temp.push_back(q);
        }
        alloc.push_back(temp);
    }


    //ALLOCATION


    //Printing headings 
    cout << "The Allocation Matrix is...";
    cout << "\n   ";
    for(int i=0; i<m; i++)
        cout << (char)('A' + i) <<" ";
    cout << endl;

    //printing the allocation vector
    for (int i = 0; i<alloc.size(); i++)
    {
        cout << i << ": ";
        for(int j = 0; j<alloc[i].size();j++)
        {
            cout << alloc[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;


    //MAX   


    //inserting data into the max vector
    for(int i=0; i<n; i++)
    {
        vector<int>temp;
        for(int j=0; j<m; j++)
        {
            fin >> q;
            temp.push_back(q);
        }
        max.push_back(temp);
    }

    //printing resource titles
    cout << "The Max Matrix is...";
    cout << "\n   ";
    for(int i=0; i<m; i++)
        cout << (char) ('A' + i) << " ";
    cout << endl;   

    //printing the max vector
    for (int i = 0; i<max.size(); i++)
    {
        cout << i << ": ";
        for(int j = 0; j<max[i].size();j++)
        {
            cout << max[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;


    cout << "The Need Matrix is...";
    cout << "\n   ";
    for(int i=0; i<m; i++)
        cout << (char)('A' + i) << " ";
    cout << endl;

    for (int i = 0; i < n; i++)
    {
        cout << i << ": ";
        for (int j = 0; j < m; j++)
        {
//
//HERE IS THE AREA OF ISSUE
//Neither of these work
//          need[i][j] = max[i][j] - alloc[i][j];
//          need.push_back(max[i][j] - alloc[i][j]);    
        }
        cout << endl;
    }
    cout << endl;

return 0;
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2020
need[i][j] = max[i][j] - alloc[i][j];

Это не работает, потому что вы не выделили память для need.

need.push_back(max[i][j] - alloc[i][j]);

Это также не работает, потому что need является вектором вектора, поэтому push_back ожидает вектор, а вы задаете ему одно значение.

Я предполагаю, что вам нужно что-то вроде этого:

need.resize(n);
for (int i = 0; i < n; i++)
{
    cout << i << ": ";
    for (int j = 0; j < m; j++)
    {
        need[i].push_back(max[i][j] - alloc[i][j]);    
    }
    cout << endl;
}
cout << endl;

Однако вам было бы лучше не используя векторы векторов, а вместо этого используя векторы значений n*m. Таким образом, вы можете сделать это:

for (int i = 0; i < n; i++)
{
    cout << i << ": ";
    for (int j = 0; j < m; j++)
    {
        need.push_back(max[i*m+j] - alloc[i*m+j]);    
    }
    cout << endl;
}
cout << endl;

Или это:

need.resize(n*m);
for (int i = 0; i < n; i++)
{
    cout << i << ": ";
    for (int j = 0; j < m; j++)
    {
        need[i*m+j] = max[i*m+j] - alloc[i*m+j];    
    }
    cout << endl;
}
cout << endl;
0 голосов
/ 03 мая 2020

Кстати, для вашего решения: вам нужно заменить это:

need.push_back(max[i][j] - alloc[i][j]);

на

need[i].push_back(max[i][j] - alloc[i][j]);

Как вы можете подумать, потребность [i] - это вектор, а push_back - векторный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...