簡體   English   中英

如何將 int 轉換為字符串,然后加入 std::ranges::views?

[英]How can I transform int to string then join with std::ranges::views?

#include <iostream>
#include <numeric>
#include <ranges>
#include <vector>
#include <string>
#include <string_view>

int main() {
    auto str = (
        std::views::iota(1)
        | std::ranges::views::take(5)
        | std::ranges::views::transform([](int x) -> std::string_view {
            return std::to_string(x) + "|";
        })
        | std::ranges::views::join
    );

    for (const char ch : str) {
        std::cout << ch;
    }

    return 0;
}

我是 cpp 函數式編程的新手。 我想生成前五個自然數並將它們轉換為字符串,然后加入它們並打印出來。

如果我使用std::string作為 lambda 的返回類型進行轉換,它會在編譯時引發很多錯誤。 我想我應該把它改成std::string_view 我改變了,它編譯沒有編譯錯誤。 However, if I use std::string_view there, the lambda function returns only reference for string, and translated string that on stack memory is removed on memory when lambda ends. 因此,該程序不打印任何內容。

我該如何解決?

如果我使用std::string作為 lambda 的返回類型進行轉換,它會在編譯時引發很多錯誤。

您觀察到的是P2328已解決的 C++20 缺陷。 如果您使用已實現 P2328 的較新編譯器版本(例如 gcc-11.2),您的代碼將是格式良好的.

在P2328之前,我認為標准中沒有簡單的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM