欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++20管道運(yùn)算符的實(shí)現(xiàn)示例

 更新時(shí)間:2025年06月27日 11:53:32   作者:mq白  
本文簡(jiǎn)要介紹C++20管道運(yùn)算符的使用與實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們不打算介紹太多,因?yàn)樗鼘?shí)際屬于c++20最為重要的一個(gè)特性ranges的一部分

我們講解一下使用和自己實(shí)現(xiàn)的例子即可

標(biāo)準(zhǔn)庫的管道運(yùn)算符使用

#include <ranges>
#include <iostream>

int main()
{
    auto const ints = { 0,1,2,3,4,5 };
    auto even = [](int i) { return 0 == i % 2; };
    auto square = [](int i) { return i * i; };

    // 組合視圖的“管道”語法:
    for (int i : ints | std::views::filter(even) | std::views::transform(square)) {
        std::cout << i << ' ';
    }

    std::cout << '\n';

    // 傳統(tǒng)的“函數(shù)式”組合語法,filter是篩選,然后再用transform篩選
    for (int i : std::views::transform(std::views::filter(ints, even), square)) {
        std::cout << i << ' ';
    }
    endl(std::cout);

    auto f = std::views::transform([](int n) { return n *= n; });
    auto ret = ints | f;//并沒有改變ints,只是返回一個(gè)序列
    for (auto i : ret) {
        std::cout << i << ' ';
    }
}

管道運(yùn)算符調(diào)用的函數(shù)并不會(huì)改變?cè)瓉淼男蛄?,這一點(diǎn)需要注意。雖然管道運(yùn)算符相比傳統(tǒng)的函數(shù)式看著要更加抽象,但是其實(shí)如果你真正的去使用了解,倒也是挺優(yōu)雅的

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

int main()
{
    using namespace std::literals;
    const auto bits = { "https:"sv, "http://"sv, "cppreference"sv, "."sv, "com"sv };
    for (char const c : bits | std::views::join) std::cout << c;
    std::cout << '\n';

    const std::vector<std::vector<int>> v{ {1,2}, {3,4,5}, {6}, {7,8,9} };
    auto jv = std::ranges::join_view(v);
    for (auto const  e : jv) std::cout << e << ' ';
    std::cout << '\n';
    
    int array[5][5]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 };
    for (int c : array | std::views::join)std::cout << c<<' ';
    std::cout << '\n';

    //默認(rèn)只能處理兩層,如果多層,那么就多join幾次
    int array2[2][2][2]{ 1,2,3,4,5,6,7,8 };
    for (int c : std::ranges::join_view(array2) | std::views::join)std::cout << c << ' ';
    std::cout << '\n';
}

1) 表示由從拉平范圍的視圖獲得的序列組成的 view 。
2) 范圍適配器對(duì)象。對(duì)于任何適合的子表達(dá)式 e 表達(dá)式 views::join(e) 表達(dá)式等價(jià)于 join_view<views::all_t<decltype((e))>>{e}

自己實(shí)現(xiàn)類似的管道運(yùn)算符

其實(shí)我們只要實(shí)現(xiàn)一個(gè)operator |即可

template<typename U, typename F>
	requires std::regular_invocable<F, U&>
std::vector<U>& operator | (std::vector<U>& vl, F f) {
	for (auto& i : vl) {
		f(i);
	}
	return vl;
}

第二行代碼是標(biāo)準(zhǔn)庫的概念庫,要求F是可調(diào)用,U的類型也符合

最后返回引用則是為了鏈?zhǔn)骄幊?/p>

使用如下:

int main() {
	std::vector v{ 1,2,3,4,5 };
	std::function f([](int& i) { i = i * i; });
	std::function f2([](int& i) {i = i + i; });
	std::function f3([](int i) {std::cout << i << ' '; });
	v | f | f2 | f3;
	std::cout << '\n';

	v | [](int& i) { i = i * i; } | [](int i) {std::cout << i << ' '; };

	std::cout << '\n';
	for (auto i : v | [](int& i) {i = i / 10; }) {
		std::cout << i << ' ';
	}
}

 多使用即可

到此這篇關(guān)于C++20管道運(yùn)算符的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++20管道運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C/C++內(nèi)存管理示例詳解

    關(guān)于C/C++內(nèi)存管理示例詳解

    這篇文章主要給大家介紹了C/C++內(nèi)存管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • C++ 開發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例

    C++ 開發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例

    這篇文章主要介紹了C++ 開發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例的相關(guān)資料,這里附有實(shí)例代碼和實(shí)現(xiàn)效果圖幫助大家參考實(shí)踐,需要的朋友可以參考下
    2017-07-07
  • C++教程之變量的作用域與生命周期詳解

    C++教程之變量的作用域與生命周期詳解

    在C++編程中,變量的作用域和生命周期是非常重要的概念。了解這些概念可以幫助開發(fā)人員編寫更好的代碼并避免錯(cuò)誤。在本文中,我們將探討C++中變量的作用域和生命周期,以及如何正確地使用它們
    2023-04-04
  • C++排序算法之插入排序解析

    C++排序算法之插入排序解析

    這篇文章主要介紹了C++排序算法之插入排序解析,將數(shù)組分為有序表和無序表,每次從有序表中取出一個(gè)元素,插入到有序表的適當(dāng)位置,每遍歷一次,有序表中元素增加一個(gè),無序表中元素個(gè)數(shù)減少一個(gè),重復(fù)n-1次,完成排序,需要的朋友可以參考下
    2023-10-10
  • C++實(shí)現(xiàn)LeetCode(309.買股票的最佳時(shí)間含冷凍期)

    C++實(shí)現(xiàn)LeetCode(309.買股票的最佳時(shí)間含冷凍期)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(309.買股票的最佳時(shí)間含冷凍期),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++使用ImGUI框架開發(fā)一個(gè)簡(jiǎn)單程序

    C++使用ImGUI框架開發(fā)一個(gè)簡(jiǎn)單程序

    ImGui?是一個(gè)用于C++的用戶界面庫,跨平臺(tái)、無依賴,支持OpenGL、DirectX等多種渲染API,下面就跟隨小編一起學(xué)習(xí)一下如何使用ImGUI框架開發(fā)一個(gè)簡(jiǎn)單程序吧
    2023-08-08
  • 一文搞懂Codec2框架解析

    一文搞懂Codec2框架解析

    這篇文章主要介紹了Codec2框架解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++類中三大函數(shù)詳解(構(gòu)造、析構(gòu)和拷貝)

    C++類中三大函數(shù)詳解(構(gòu)造、析構(gòu)和拷貝)

    c++三大函數(shù)指的是拷貝構(gòu)造、拷貝賦值、析構(gòu)函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++類中三大函數(shù)(構(gòu)造、析構(gòu)和拷貝)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • C語言超詳細(xì)講解隊(duì)列的實(shí)現(xiàn)及代碼

    C語言超詳細(xì)講解隊(duì)列的實(shí)現(xiàn)及代碼

    隊(duì)列(Queue)與棧一樣,是一種線性存儲(chǔ)結(jié)構(gòu),它具有如下特點(diǎn):隊(duì)列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First?In?First?Out)的原則,簡(jiǎn)稱FIFO結(jié)構(gòu)。在隊(duì)尾添加元素,在隊(duì)頭刪除元素
    2022-04-04
  • C++ QT智能指針的使用詳解

    C++ QT智能指針的使用詳解

    這篇文章主要介紹了C++ QT智能指針的使用,Qt是一個(gè)跨平臺(tái)的C++框架,主要用來開發(fā)圖形用戶界面程序,也可以開發(fā)不帶界面的命令行程序,下面我們來了解QT智能指針是如何使用的
    2023-12-12

最新評(píng)論