c++ - 一天中的月份,其中一个 for 循环或 range-v3 lib 中的序列
问题描述
我尝试用这样的顺序来计算一天中的月份:一月份它将打印 1 和 31 时间,二月份将打印 2 和 28 时间,依此类推。
std::vector<int> list = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int count = 0;
for(int k = 0; k < 12; k++){
for(int i = 0; i < list[k]; i++)
cout << count + 1;
count++;
}
list 保留当月的总天数。
我可以用这个 for 循环来做,但我想在 1 个循环或 range-v3 lib 中做。在 range-v3 lib 中,我尝试使用累积功能,但我做不到。
任何想法?
解决方案
使用 range-v3,您可以执行以下操作:
std::array<int, 12> days{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
auto r = days | ranges::view::transform([count = 0](int n) mutable
{
return ranges::view::ints(1, 1 + n)
| ranges::view::transform([count = ++count](int){ return count; });
})
| ranges::view::join;
for (auto e : r)
std::cout << e << ' ';
但
for (int i = 0; i < 12; ++i) {
for (int j = 0; j != days[i]; ++j) {
std::cout << i + 1;
}
}
似乎更清楚。
推荐阅读
- amazon-web-services - 健康检查失败,代码如下:[502]
- python - 如何使用 Python 签署文件?
- java - JPanel 更新不正确
- javascript - 尝试绘制多个squears(Javascript)
- jquery - inst is undefined on countdown
- javascript - 如何在 React 中从另一个组件重新渲染一个组件
- ios - SwiftUI:删除 ForEach 中的最后一行
- java - 取消拥挤的服务器线程
- c++ - pthread 是否可以调用同一类中的 start_routine?
- python - Python Requests-Cache 仍在查询远程 URL