最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

我們不打算介紹太多,因為它實(shí)際屬于c++20最為重要的一個特性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,只是返回一個序列
    for (auto i : ret) {
        std::cout << i << ' ';
    }
}

管道運(yùn)算符調(diào)用的函數(shù)并不會改變原來的序列,這一點(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) 范圍適配器對象。對于任何適合的子表達(dá)式 e 表達(dá)式 views::join(e) 表達(dá)式等價于 join_view<views::all_t<decltype((e))>>{e}

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

其實(shí)我們只要實(shí)現(xiàn)一個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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++特殊類設(shè)計與類型轉(zhuǎn)換詳細(xì)代碼示例

    C++特殊類設(shè)計與類型轉(zhuǎn)換詳細(xì)代碼示例

    在C++編程語言中,類類型轉(zhuǎn)換操作符是一種特殊的功能,允許我們把一個類的對象轉(zhuǎn)換為其他類型,如內(nèi)置類型、類類型或者由類型別名定義的類型,這篇文章主要介紹了C++特殊類設(shè)計與類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • Qt實(shí)現(xiàn)簡單五子棋小游戲

    Qt實(shí)現(xiàn)簡單五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡單五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語言 if else 語句詳細(xì)講解

    C語言 if else 語句詳細(xì)講解

    本文主要介紹C語言中的if else,這里詳細(xì)介紹了if else 語句并提供了簡單的示例代碼,希望能幫助編程入門的小伙伴學(xué)習(xí)
    2016-07-07
  • Qt讀寫ini文件之QSettings用法

    Qt讀寫ini文件之QSettings用法

    這篇文章主要為大家介紹了Qt讀寫ini文件之QSettings的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Qt實(shí)現(xiàn)進(jìn)程間通信

    Qt實(shí)現(xiàn)進(jìn)程間通信

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)進(jìn)程間通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C/C++中的OpenCV讀取視頻與調(diào)用攝像頭

    C/C++中的OpenCV讀取視頻與調(diào)用攝像頭

    這篇文章主要介紹了C/C++中的OpenCV讀取視頻與調(diào)用攝像頭,具有很好的參考價值,希望對大家有所幫助。
    2022-11-11
  • C++數(shù)據(jù)結(jié)構(gòu)二叉搜索樹的實(shí)現(xiàn)應(yīng)用與分析

    C++數(shù)據(jù)結(jié)構(gòu)二叉搜索樹的實(shí)現(xiàn)應(yīng)用與分析

    從這篇博客開始,我就要和大家介紹有關(guān)二叉搜索樹的知識,它還衍生出了兩棵樹——AVL樹和紅黑樹,在后面兩篇博客我都會介紹。今天先從二叉搜索樹開始引入
    2022-02-02
  • C++實(shí)現(xiàn)日期類(Date)

    C++實(shí)現(xiàn)日期類(Date)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)日期類的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C語言sizeof和strlen區(qū)別小結(jié)

    C語言sizeof和strlen區(qū)別小結(jié)

    C語言中的sizeof和strlen是兩個常用的操作符/函數(shù),但它們的功能和用途有很大的區(qū)別,本文就詳細(xì)的來介紹一下C語言sizeof和strlen區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題

    C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題

    這篇文章主要介紹了C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論

司法| 洪雅县| 化州市| 基隆市| 玛纳斯县| 北票市| 安丘市| 临颍县| 文成县| 宣武区| 张掖市| 保德县| 哈巴河县| 孝昌县| 庆安县| 陵川县| 海南省| 太仆寺旗| 科技| 拉孜县| 屏山县| 永定县| 怀化市| 民权县| 通化县| 大名县| 平乐县| 临沭县| 伊宁市| 宁远县| 台江县| 辽阳市| 平遥县| 固原市| 中西区| 平果县| 丹棱县| 永清县| 莫力| 尖扎县| 荥经县|