我是否在 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);
}
我尝试制作一个包含常规事务(如付款)的日历,并在 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);
}