首页 > 解决方案 > 如何在一个循环中分离两个不同的数组?

问题描述

我想以这种方式分离a -> numb -> 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;

标签: c++arraysstring

解决方案


你可以使用提升

#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];
    }
}

推荐阅读