亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

c++11新增的便利算法實例分析

2020-01-26 15:20:48
字體:
來源:轉載
供稿:網友

C++是一門應用非常廣泛的程序設計語言,而c++11則新增加了一些便利的算法,這些新增的算法使我們的代碼寫起來更簡潔方便,本文列舉一些常用的新增算法,算是做個總結分析,更多的新增算法讀者可以參考:http://en.cppreference.com/w/cpp/algorithm。

算法庫新增了三個用于判斷的算法all_of、any_of和none_of,定義如下:

template< class InputIt, class UnaryPredicate >bool all_of( InputIt first, InputIt last, UnaryPredicate p );template< class InputIt, class UnaryPredicate >bool any_of( InputIt first, InputIt last, UnaryPredicate p );template< class InputIt, class UnaryPredicate >bool none_of( InputIt first, InputIt last, UnaryPredicate p );

① all_of:檢查區間[first, last)中是否所有的元素都滿足一元判斷式p,所有的元素都滿足條件返回true,否則返回false。
② any_of:檢查區間[first, last)中是否至少有一個元素都滿足一元判斷式p,只要有一個元素滿足條件就返回true,否則返回true。
③ none_of:檢查區間[first, last)中是否所有的元素都不滿足一元判斷式p,所有的元素都不滿足條件返回true,否則返回false。

下面是這幾個算法的示例:

#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){    vector<int> v = { 1, 3, 5, 7, 9 };   auto isEven = [](int i){return i % 2 != 0;    bool isallOdd = std::all_of(v.begin(), v.end(), isEven);    if (isallOdd)       cout << "all is odd" << endl;    bool isNoneEven = std::none_of(v.begin(), v.end(), isEven);    if (isNoneEven)       cout << "none is even" << endl;    vector<int> v1 = { 1, 3, 5, 7, 8, 9 };    bool anyof = std::any_of(v1.begin(), v1.end(), isEven);    if (anyof)       cout << "at least one is even" << endl;}

輸出:

all is odd
none is odd
at least one is even

算法庫的查找算法新增了一個find_if_not,它的含義和find_if是相反的,即查找不符合某個條件的元素,find_if也可以實現find_if_not的功能,只需要將判斷式改為否定的判斷式即可,現在新增了find_if_not之后,就不需要再寫否定的判斷式了,可讀性也變得更好。下面是它的基本用法:

#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){  vector<int> v = { 1, 3, 5, 7, 9,4 };  auto isEven = [](int i){return i % 2 == 0;};  auto firstEven = std::find_if(v.begin(), v.end(), isEven);  if (firstEven!=v.end())       cout << "the first even is " <<* firstEven << endl;    //用find_if來查找奇數則需要重新寫一個否定含義的判斷式  auto isNotEven = [](int i){return i % 2 != 0;};  auto firstOdd = std::find_if(v.begin(), v.end(),isNotEven);    if (firstOdd!=v.end())       cout << "the first odd is " <<* firstOdd << endl;    //用find_if_not來查找奇數則無需新定義判斷式    auto odd = std::find_if_not(v.begin(), v.end(), isEven);    if (odd!=v.end())       cout << "the first odd is " <<* odd << endl;}

將輸出:

the first even is 4
the first odd is 1
the first odd is 1

可以看到使用find_if_not不需要再定義新的否定含義的判斷式了,更簡便了。

算法庫還增加了一個copy_if算法,它相比原來的copy算法多了一個判斷式,用起來更方便了,下面是它的基本用法:

#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){    vector<int> v = { 1, 3, 5, 7, 9, 4 };    std::vector<int> v1(v.size());    //根據條件拷貝    auto it = std::copy_if(v.begin(), v.end(), v1.begin(), [](int i){return i%2!=0;});    //縮減vector到合適大小    v1.resize(std::distance(v1.begin(),it));    for(int i : v1)    {       cout<<i<<" ";    }    cout<<endl;}  

算法庫新增了iota用來方便的生成有序序列,比如我們需要一個定長數組,這個數組中的元素都是在某一個數值的基礎之上遞增的,那么用iota可以很方便的生成這個數組了。下面是它的基本用法:

#include <numeric>#include <array>#include <vector>#include <iostream>using namespace std; int main(){vector<int> v(4) ;//循環遍歷賦值來初始化數組//for(int i=1; i<=4; i++)//{//  v.push_back(i);//}//直接通過iota初始化數組,更簡潔  std::iota(v.begin(), v.end(), 1);  for(auto n: v) {    cout << n << ' ';  }  cout << endl;    std::array<int, 4> array;  std::iota(array.begin(), array.end(), 1);  for(auto n: array) {    cout << n << ' ';  }  std::cout << endl;}

將輸出:

1 2 3 4
1 2 3 4

可以看到使用iota比遍歷賦值來初始化數組更簡潔,需要注意的是iota初始化的序列需要指定大小,如果上面的代碼中:vector<int> v(4) ;沒有指定初始化大小為4的話,則輸出為空。

算法庫還新增了一個同時獲取最大值和最小值的算法minmax_element,這樣我們如果想獲取最大值和最小值的時候就不用分別調用max_element和max_element算法了,用起來會更方便,minmax_element會將最小值和最大值的迭代器放到一個pair中返回,下面是它的基本用法:

#include <iostream>#include <algorithm>#include <vector>using namespace std;int main() {  // your code goes here  vector<int> v = { 1, 2, 5, 7, 9, 4 };  auto result = minmax_element(v.begin(), v.end());    cout<<*result.first<<" "<<*result.second<<endl;  return 0;}

將輸出:

1 9

算法庫新增了is_ sorted和is_ sorted_until算法,is_sort用來判斷某個序列是否是排好序的,is_sort_until則用來返回序列中前面已經排好序的部分序列。下面是它們的基本用法:

#include <iostream>#include <algorithm>#include <vector>using namespace std;int main() {  vector<int> v = { 1, 2, 5, 7, 9, 4 };  auto pos = is_sorted_until(v.begin(), v.end());    for(auto it=v.begin(); it!=pos; ++it)  {    cout<<*it<< " ";  }  cout<<endl;    bool is_sort = is_sorted(v.begin(), v.end());  cout<< is_sort<<endl;  return 0;}

將輸出:

1 2 5 7 9
0

總結:這些新增的算法讓我們用起來更加簡便,也增強了代碼的可讀性。

希望本文所述算法對大家更好的掌握C++11能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情视频免费观看| 91精品国产综合久久香蕉最新版| 国产精品视频导航| 精品久久久精品| 97视频国产在线| 国产一区二区丝袜高跟鞋图片| 久久亚洲精品小早川怜子66| 久久综合伊人77777尤物| 国产极品精品在线观看| 欧美日本精品在线| 久久久精品在线| 成人网在线免费观看| 日韩最新在线视频| 欧美在线视频观看免费网站| 日韩av在线免费观看一区| 精品国产美女在线| 亚洲天堂一区二区三区| 欧美激情视频免费观看| 亚洲激情视频在线播放| 国产精品v片在线观看不卡| 91sao在线观看国产| 久久亚洲春色中文字幕| 欧美性69xxxx肥| 宅男66日本亚洲欧美视频| 日韩亚洲精品电影| 亚洲国产成人精品女人久久久| 日本欧美中文字幕| 欧美视频第一页| 欧美美女18p| 伊人久久综合97精品| 久久免费高清视频| 欧美性xxxxx极品| 热re91久久精品国99热蜜臀| 91在线看www| 精品视频久久久久久| 欧美精品久久久久久久| 91中文在线视频| 国产成人精品久久| 欧美日韩性视频在线| 亚洲欧洲国产伦综合| 欧美性开放视频| 黑人巨大精品欧美一区二区免费| 夜夜嗨av色综合久久久综合网| 日韩毛片在线观看| 久久久久久久久网站| 日韩免费观看高清| 欧美国产激情18| 亚洲香蕉伊综合在人在线视看| 成人欧美一区二区三区在线湿哒哒| 亚洲字幕在线观看| 欧美成人黑人xx视频免费观看| 亚洲人永久免费| 日韩精品亚洲精品| 2021久久精品国产99国产精品| 亚洲国产第一页| 北条麻妃一区二区在线观看| 2020久久国产精品| 米奇精品一区二区三区在线观看| 日韩美女在线看| 97视频免费在线看| 国产精品v片在线观看不卡| 国产在线观看91精品一区| 一本色道久久88亚洲综合88| 日本一欧美一欧美一亚洲视频| 久久国产加勒比精品无码| 久久九九全国免费精品观看| 奇米成人av国产一区二区三区| 日韩中文在线中文网在线观看| 在线观看日韩www视频免费| 久久九九免费视频| 欧美午夜电影在线| 国语自产精品视频在线看一大j8| 亚洲综合精品一区二区| 中文字幕亚洲字幕| 亚洲欧美综合v| 国产亚洲精品一区二区| 欧美午夜视频一区二区| 中文字幕精品网| 欧美特级www| 亚洲国产欧美日韩精品| 国产精品久久久久久五月尺| 欧美亚洲午夜视频在线观看| 欧美在线视频导航| 91精品久久久久久久久中文字幕| 欧美自拍大量在线观看| 久久av.com| 国产欧美精品久久久| 日本a级片电影一区二区| 日本免费在线精品| 国产乱肥老妇国产一区二| 亚洲人成网站色ww在线| 在线播放亚洲激情| 精品日韩中文字幕| 国产精品h在线观看| 7m精品福利视频导航| 欧美日韩免费一区| 色偷偷9999www| 国产v综合ⅴ日韩v欧美大片| 中文综合在线观看| 国产精品视频xxxx| 亚洲色图15p| 精品人伦一区二区三区蜜桃网站| 国产91精品高潮白浆喷水| 欧美激情精品久久久久久免费印度| 黄色成人av网| 久久久久久一区二区三区| 国产成人综合亚洲| 久久精品国产成人| 亚洲欧美精品中文字幕在线| 亚洲影视九九影院在线观看| 91免费在线视频网站| 欧美成人精品在线观看| 久久青草福利网站| 福利二区91精品bt7086| 98精品国产高清在线xxxx天堂| 国模视频一区二区| 国产精品成人久久久久| 91精品国产综合久久久久久久久| 久久中文字幕视频| 欧美日本在线视频中文字字幕| 久久香蕉精品香蕉| 国产精品久久久久av| 日韩av网站导航| 亚洲激情视频网站| 久久久亚洲天堂| 性色av一区二区咪爱| 国产日韩欧美综合| 国产深夜精品福利| 国产日韩精品在线观看| 久久国产精品99国产精| 91精品国产自产在线| 成人h视频在线观看播放| 亚洲无线码在线一区观看| 2019中文字幕全在线观看| 久久久国产精品视频| 欧美一级视频一区二区| 欧美日韩裸体免费视频| 久久九九免费视频| 中文在线资源观看视频网站免费不卡| 欧洲成人性视频| 国产欧美日韩免费看aⅴ视频| 日韩在线中文视频| 性欧美办公室18xxxxhd| 国产午夜精品视频| 91精品国产免费久久久久久| 国产精品女主播视频| 国产精品成人久久久久| 九九久久精品一区| 久久久精品国产| 亚洲天堂免费在线| 欧美精品在线免费| 国产视频亚洲视频| 91九色单男在线观看| 亚洲最大成人网色| 久久99久久99精品中文字幕| 欧美日韩国产va另类| 亚洲视频精品在线| 亚洲成色777777在线观看影院| 亚洲深夜福利网站| 欧美大全免费观看电视剧大泉洋| 日韩国产高清污视频在线观看| 国产亚洲一区二区在线| 成人免费在线视频网站| 亚洲国产精品字幕|