在for循环c ++中将一个向量复制到另一个向量
Copy one vector to another in for loop c++
我需要为月度任务实施一个简单版本的时间表。比如支付电费,通讯订阅费等。我想实现如下一组操作:
- ADD(i,s) - 将名称为 s 的个案分配给当月的第 i 天。
- DUMP(i) - 显示为当月第 i 天安排的所有任务。
- 下一步 - 转到新月份的待办事项列表。执行此命令时,将创建下个月的(新)待办事项列表,而不是当前月份的当前(旧)待办事项列表,并激活:旧待办事项列表中的所有任务都是复制到新列表。执行该命令后,新的待办事项和下个月变成当前月份,旧的待办事项停止工作。移动到新的月份时,需要注意月份天数的不同:
如果下个月的天数多于当前的天数,则“额外”天数必须留空(不包含个案);
如果下个月的天数少于当前月份,则所有“额外”天数的个案必须移至下个月的最后一天。
基本上我对“下一步”有疑问。即从旧矢量月份复制到新矢量月份。这是我的代码:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
//q - number of operations to perform.
//day - on which day to plan operation.
//to_do - what exactly to do on some day.
//operation - which kind of operation to perform.
vector<int>day_mon = {31,28,31,30,31,30,31,31,30,31,30,31};
//m_ind - month index
int m_ind = 0;
int q,day;
string operation;
string to_do;
//vector of the current month
vector<vector<string>> current_month(31);
cin >> q;
//for q operations:
for(int i = 0;i< q;i++){
cin >> operation;
if(operation == "NEXT"){
//insert days in the next months
vector<vector<string>> next_month = current_month;
int days_diff = day_mon[m_ind] - day_mon[m_ind+1];
//if next month has less days as current month, write days into the last day
//of the next months
if(days_diff > 0){
for(int i = 0; i < days_diff;i++){
next_month[day_mon[m_ind]-1].insert(end(next_month[day_mon[m_ind]-1]), begin(next_month[day_mon[m_ind]+i]), end(next_month[day_mon[m_ind]+i]));
}
}
} else if(operation == "ADD"){
cin >> day >> to_do;
current_month[day].push_back(to_do);
} else if(operation == "DUMP"){
cin >> day;
for(int i = 0; i < current_month[day].size(); i++){
cout << current_month[day][i] << ' ';
}
cout << endl;
current_month[day].clear();
}
}
return 0;
}
我的问题是,我不知道如何将 next_month
有效地转换为 current_month
。如何在 C++ 中完成?
这个问题我不是很懂。
如果您正在尝试克隆载体,请尝试以下操作:
#include <iostream>
#include <vector>
using namespace std;
int main () {
vector<int> list1 = {1, 2};
vector<int> newList;
for (int i = 0; i < list1.size(); i++) {
newList.push_back(list1[i]);
}
for (int i = 0; i < newList.size(); i++) {
cout << newList[i] << ", ";
}
return 0;
}
预期的输出是:
1, 2,
抱歉没有完全理解这个问题。反正可能是错的。
您需要的是每个月的一组向量。如果您想将月份编号为 0 - 11,则可以是另一个向量,也可以是月份名称到向量的映射。让我们去前者
嵌套向量太多也难以阅读。让我们定义一些类型。
typedef vector<string> day; // the tasks for a day
typedef vector<day> month; // a month
好的,现在让我们创建一个年份
vector<month> year(12);
for (int days : day_mon) {
year.emplace_back(month(days));
}
现在让我们选择一月作为我们当前的月份
month& current_month = year[0];
并在 1 月 4 日添加任务
current_month[4].push_back("do dishes");
现在让我们切换月份
current_month = year[5];
.....
我需要为月度任务实施一个简单版本的时间表。比如支付电费,通讯订阅费等。我想实现如下一组操作:
- ADD(i,s) - 将名称为 s 的个案分配给当月的第 i 天。
- DUMP(i) - 显示为当月第 i 天安排的所有任务。
- 下一步 - 转到新月份的待办事项列表。执行此命令时,将创建下个月的(新)待办事项列表,而不是当前月份的当前(旧)待办事项列表,并激活:旧待办事项列表中的所有任务都是复制到新列表。执行该命令后,新的待办事项和下个月变成当前月份,旧的待办事项停止工作。移动到新的月份时,需要注意月份天数的不同:
如果下个月的天数多于当前的天数,则“额外”天数必须留空(不包含个案);
如果下个月的天数少于当前月份,则所有“额外”天数的个案必须移至下个月的最后一天。
基本上我对“下一步”有疑问。即从旧矢量月份复制到新矢量月份。这是我的代码:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
//q - number of operations to perform.
//day - on which day to plan operation.
//to_do - what exactly to do on some day.
//operation - which kind of operation to perform.
vector<int>day_mon = {31,28,31,30,31,30,31,31,30,31,30,31};
//m_ind - month index
int m_ind = 0;
int q,day;
string operation;
string to_do;
//vector of the current month
vector<vector<string>> current_month(31);
cin >> q;
//for q operations:
for(int i = 0;i< q;i++){
cin >> operation;
if(operation == "NEXT"){
//insert days in the next months
vector<vector<string>> next_month = current_month;
int days_diff = day_mon[m_ind] - day_mon[m_ind+1];
//if next month has less days as current month, write days into the last day
//of the next months
if(days_diff > 0){
for(int i = 0; i < days_diff;i++){
next_month[day_mon[m_ind]-1].insert(end(next_month[day_mon[m_ind]-1]), begin(next_month[day_mon[m_ind]+i]), end(next_month[day_mon[m_ind]+i]));
}
}
} else if(operation == "ADD"){
cin >> day >> to_do;
current_month[day].push_back(to_do);
} else if(operation == "DUMP"){
cin >> day;
for(int i = 0; i < current_month[day].size(); i++){
cout << current_month[day][i] << ' ';
}
cout << endl;
current_month[day].clear();
}
}
return 0;
}
我的问题是,我不知道如何将 next_month
有效地转换为 current_month
。如何在 C++ 中完成?
这个问题我不是很懂。 如果您正在尝试克隆载体,请尝试以下操作:
#include <iostream>
#include <vector>
using namespace std;
int main () {
vector<int> list1 = {1, 2};
vector<int> newList;
for (int i = 0; i < list1.size(); i++) {
newList.push_back(list1[i]);
}
for (int i = 0; i < newList.size(); i++) {
cout << newList[i] << ", ";
}
return 0;
}
预期的输出是:
1, 2,
抱歉没有完全理解这个问题。反正可能是错的。
您需要的是每个月的一组向量。如果您想将月份编号为 0 - 11,则可以是另一个向量,也可以是月份名称到向量的映射。让我们去前者
嵌套向量太多也难以阅读。让我们定义一些类型。
typedef vector<string> day; // the tasks for a day
typedef vector<day> month; // a month
好的,现在让我们创建一个年份
vector<month> year(12);
for (int days : day_mon) {
year.emplace_back(month(days));
}
现在让我们选择一月作为我们当前的月份
month& current_month = year[0];
并在 1 月 4 日添加任务
current_month[4].push_back("do dishes");
现在让我们切换月份
current_month = year[5];
.....