我是否在 2d 向量中正确分配了内存?

Have I allocated memory correctly in 2d vector?

我尝试制作一个包含常规事务(如付款)的日历,并在 1 月 31 日添加事务时得到 out_of_range。 所以我认为我在 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);
    }

}

std::vector 的构造函数让人难以记忆。正在调用此构造函数:

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

创建 n 个项目并将 v 复制到每个项目。结果是一个包含 12 个项目的数组,每个项目的天数与当前月份的天数相同。

您似乎想使用那个 table 分配一整年的天数。我不知道 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