c++ 如何创建将数据一分为二的视图

y1aodyip  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(96)

我想创建一个视图,它包含字符串的两个部分。我添加了一些代码示例来说明我想实现什么。我该怎么做呢?

#include <iostream>
#include <string>
#include <ranges>
#include <vector>
#include <cassert>

int main() {
    std::vector<std::string> data{
        "abcdef",
        "12345678910",
        "ab",
        "qwerty",
        "xyzxyz",
        "987654321"
    };

    // Ok:
    auto chunk3 = std::views::chunk(data, 3);
    assert(std::ranges::size(chunk3) == 2);
    for (auto chunk : chunk3) {
        assert(std::ranges::size(chunk) == 3);
    }

    // Problem:
    auto view = /*...*/
    assert(std::ranges::size(view) == 6);
    for (auto halves : view) {
        assert(std::ranges::size(halves) == 2);
    }
}

chunk3看起来像什么:

/*
chunk3 {
    {"abcdef", "12345678910", "ab"}
    {"qwerty", "xyzxyz", "987654321"}
}
*/

视图的外观:

/*
view {
    {{"abc"}, {"def"}}
    {{"123456"}, {"78910"}}
    // ...
}
*/
aydmsdu9

aydmsdu91#

可以使用views::transform将原始元素string转换为包含两个半-string_view的数组

auto view = data | std::views::transform([](std::string_view s) { 
                     return std::array{s.substr(0, s.size() / 2), 
                                       s.substr(s.size() / 2)};
                   });

相关问题