Правильно ли я выделил память в 2d векторе? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытался сделать календарь с обычными делами (например, оплата) и получить out_of_range при добавлении дела до 31 января. Поэтому я думаю, что я неправильно выделил память в моем 2d-векторе. Кроме того, я попытался отладить, но я не мог проверить размер вектора (месяц) от вектора векторов. Поэтому я также попробовал sizeof, но он показывает 0 в этом случае: cout << sizeof(business) / sizeof(business[0][0]); и 1 в этом: cout << sizeof(business) / sizeof(business[0]);. Ввод: 12 Add 5 Salary Add 31 Walk

#include "pch.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;

void Add(vector<vector<string>>& business, const int current_month)
{
    int current_day;
    string s;
    cout << "Enter a day, please" << endl;
    cin >> current_day;
    cout << "Enter your business, please" << endl;
    cin >> s;
    current_day -= 1;
    business[current_month][current_day] = s;
}

int main()
{
    int current_month = 0;
    vector<int> count_of_days_in_months =  { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    vector<vector<string> > business(12, vector<string>(( count_of_days_in_months[current_month] ) - 1));
    cout << sizeof(business) / sizeof(business[0][0]);
    int Q;
    cin >> Q;
    string command;
    for (int j = 0; j < Q; j++)
    {
        cout << "Enter a command, please" << endl;
        cin >> command;
        if (command == "Add")
            Add(business, current_month);
        else if (command == "Dump")
            Dump(business, current_month);
        else if (command == "Next")
            Next(business, count_of_days_in_months, current_month);
    }

}

1 Ответ

1 голос
/ 21 февраля 2020

Конструкторы std::vector запутывают бесконечно. Этот конструктор вызывается:

std::vector::vector(size_type n, const value_type& v)

, который создает n элементов и копирует v в каждый. В результате получается массив из 12 элементов, каждый из которых имеет такое же количество дней, что и текущий месяц.

Похоже, что вы хотите выделить сумму дней в году, используя эту таблицу. Я не знаю конструктора для std::vector, который это делает. Но это не много кода, чтобы сделать это вручную:

std::vector<std::vector<string>> business;
business.reserve(count_of_days_in_months.size());
for (auto days : count_of_days_in_months) {
    business.emplace_back(days); 
}

Демо: https://godbolt.org/z/Jd_94W

...