首頁 > 後端開發 > C++ > 如何使用 Range-V3 管道展平從函數傳回的向量?

如何使用 Range-V3 管道展平從函數傳回的向量?

Patricia Arquette
發布: 2024-11-01 06:28:30
原創
902 人瀏覽過

How Can I Flatten Vectors Returned from a Function Using Range-V3 Pipelines?

使用Range-V3 的臨時容器的範圍管道

問題:

問題:

您有一個元素範圍(src) 和第三方函數(f),該函數將範圍中的元素作為輸入並傳迴向量。您想要使用 f 轉換範圍中的每個元素並將結果向量展平為單一範圍。但是,直接使用 view::transform 和 view::join 是行不通的,因為無法為臨時容器建立視圖。

解:
auto rng = src | views::transform(f) | views::cache1 | views::join;
登入後複製

支援這樣的管道,range-v3 引入了views::cache1 運算子。此運算符可讓您將視圖的結果儲存在臨時容器中,然後建立該容器的視圖。透過在管道中包含views::cache1,您可以建立展平向量的視圖:

程式碼範例:
<code class="cpp">#include <range/v3/view.hpp>
#include <range/v3/algorithm.hpp>
#include <vector>

std::vector<std::string> f(int i) {
  return std::vector<std::string>(i, char('a' + i));
}

int main() {
  auto rng = views::iota(0, 4)
        | views::transform([](int i) { return f(i); })
        | views::cache1
        | views::join('-');
  
  check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});
  
  CPP_assert(input_range<decltype(rng)>);
  CPP_assert(!range<const decltype(rng)>);
  CPP_assert(!forward_range<decltype(rng)>);
  CPP_assert(!common_range<decltype(rng)>);

  return 0;
}</code>
登入後複製
以下程式碼範例示範如何使用views::cache1建立一個範圍管道,用於轉換和展平範圍內的元素:

以上是如何使用 Range-V3 管道展平從函數傳回的向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板