c++ - 如何在一个循环中分离两个不同的数组?
问题描述
我想以这种方式分离a -> num
,b -> num2
但我不能将变量的另一部分添加到 for 循环中,for (auto& i, i2 : arr, arr2)
还有其他方法可以做到这一点吗?
#include <charconv>
int64_t a = 123567893,
b = 85162,
test = 0,
test2 = 0;
string arr = to_string(a),
arr2 = to_string(b),
num,
num2 ;
for (auto& i : arr, arr2)
{
num.push_back(i);
num2.push_back(i);
cout << i;
// cout << i2;
}
from_chars(num.data(), num.data() + num.size(), test);
from_chars(num2.data(), num2.data() + num2.size(), test2);
cout << "\n" << test << endl;
cout << "\n" << test2 << endl;
解决方案
你可以使用提升
#include <boost/range/combine.hpp>
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::string arr = "ABC";
std::string arr2 = "XYZ";
std::string num, num2;
assert(arr.size() == arr2.size());
for (const auto &i : boost::combine(arr, arr2)) {
decltype(arr)::value_type a;
decltype(arr2)::value_type b;
boost::tie(a, b) = i;
num.push_back(a);
num2.push_back(b);
cout << a;
cout << b;
}
}
输出是
AXBYCZ
我不知道是否有没有 boost 的基于范围的 for 循环的解决方案。当然,你可以
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::string arr = "ABC";
std::string arr2 = "XYZ";
std::string num, num2;
for (unsigned int i{0}; i < std::max(arr.size(), arr2.size()); ++i) {
if (i < arr.size()) num.push_back(arr[i]);
if (i < arr2.size()) num2.push_back(arr2[i]);
if (i < arr.size()) cout << arr[i];
if (i < arr2.size()) cout << arr2[i];
}
}
推荐阅读
- python - 如何使用 tkinter 增量打印到 GUI
- r - R:根据条件隐藏 DT::datatable 中的单元格
- c++ - c++20中类模板构造函数可以有冗余模板参数列表吗
- ios - PunchThrough LightBlue 如何让虚拟设备发送通知?
- sql - 根据最大值过滤 SQL Server 数据
- arrays - Swift - find object in array of enums with associated values
- ldap - 如何在 RBAC 开启的情况下设置 Airflow AD/LDAP superuser_filter 和 data_profiler_filter?
- javascript - Javascript modal - 图片库
- php - 如何在 Laravel Nova 资源标题中使用 html
- sapui5 - UI5:SmartTable 个性化/变体管理错误