1. 程式人生 > >C++ 11 特性:中的演算法

C++ 11 特性:中的演算法

參考文獻:《C++ Primer》

一、algorithm介紹

algorithm譯為演算法,提供了大量基於迭代器的非成員模版函式。本文將盡可能全面的講解algorithm標頭檔案下的演算法以及使用。

二、說明

  • benend表示元素範圍的迭代器
  • ben2表示第二個輸入序列開始位置的迭代器,end2表示第二個輸入序列的末尾位置。若沒有end2的話,則第一個輸入序列的長度與第二個輸入序列的長度一致。
  • dest表示目的序列的迭代器。對於給定輸入序列,演算法需要生成多少元素,目的序列必須保證能儲存同樣多的元素。
  • unaryPredbinaryPred是一元與二元謂詞。
  • unaryOp
    binaryOp是可呼叫物件,可分別使用來自輸入序列的一個和兩個實參來呼叫。

三、演算法

1.查詢物件的演算法

1.1 簡單查詢

函式名稱
find (beg, end, val)
find_if (beg, end, unaryPred)
find_if_not (beg, end, unaryPred)
count (beg, end, val)
count _if (beg, end, unaryPred)


find 返回一個迭代器,指向輸入序列中第一個等於val的元素。
find_if 返回一個迭代器,指向輸入序列中第一個滿足unaryPred的元素。
find_if_not

返回一個迭代器,指向輸入序列中第一個不滿足unaryPred的元素。
count 返回一個計數器,指出val出現的次數。
count_if 返回一個計數器,指出滿足unaryPred的元素的個數。

函式名稱
all_of (beg, end, unaryPred)
any_of (beg, end, unaryPred)
none_of (beg, end, unaryPred)


all_of 返回一個bool值,unaryPred對所有元素都滿足,則返回true。如果序列為空也返回true,否則返回false。
any_of 返回一個bool值,unaryPred對任意一個元素滿足,則返回true,否則返回false。如果序列為空則返回false。
none_of

返回一個bool值,unaryPred對所有元素都不滿足,則返回true。如果序列為空也返回true,否則返回false。

1.2 查詢重複值

函式名稱
adjacent_find (beg, end)
adjacent_find (beg, end, binaryPred)
search_n (beg, end, count)
search_n (beg, end, count, binaryPred)


adjacent_find 返回一個迭代器,指向序列中第一對相鄰重複的元素,如果序列中沒有相鄰重複的元素,則返回end。
search_n 返回一個迭代器,從此位置開始,有count個相等元素。如果序列中不存在這樣的子序列,則返回end。

1.3 查詢子序列

函式名稱
search (beg1, end1, beg2, end2)
search (beg1, end1, beg2, end2, binaryPred)
find_first_of (beg1, end1, beg2, end2)
find_first_of (beg1, end1, beg2, end2, binaryPred)
find_end (beg1, end1, beg2, end2)
find_end (beg1, end1, beg2, end2, binaryPred)


search 返回一個迭代器,指向第二個子序列在第一個序列中第一次出現的位置,如果未找到匹配的子序列,則返回end1。
find_first_of 返回一個迭代器,指向第二個序列中任意元素在第一個序列中第一次出現的位置,如果未找到匹配的子序列,則返回end1。
find_end 返回一個迭代器,指向第二個子序列在第一個序列中最後一次出現的位置,如果未找到匹配的子序列,則返回end1。

2. 其他只讀演算法

函式名稱
for_each (beg, end, unaryOp)
mismatch (beg1, end1, beg2)
mismatch (beg1, end1, beg2, binaryPred)
equal (beg1, end1, beg2))
equal (beg1, end1, beg2, binaryPred)


for_each 對輸入序列中的每個元素應用可呼叫物件unaryOp。
mismatch 比較兩個序列中的元素,返回一個迭代器的pair,表示兩個序列中第一個不匹配的元素。如果所有元素都匹配,則返回的pair中第一個迭代器為end1,第二個迭代器指向beg2中偏移量等於第一個序列長度的位置。
equal 返回一個bool值,如果兩個序列完全相同則返回true。

如有不對的地方歡迎大家指正交流 ,持續更新中

相關推薦

C++ 11 特性演算法

參考文獻:《C++ Primer》 一、algorithm介紹 algorithm譯為演算法,提供了大量基於迭代器的非成員模版函式。本文將盡可能全面的講解algorithm標頭檔案下的演算法以

C++11特性列表初始化VS2010vector的初始化方式

        在使用VS2010學習C++Primer第五版時,學習到了初始化的問題,算是一個小難點吧。         C++11的新特性支援列表初始化:將初始值放在花括號(注意不是圓括號)內進行

C++ 11 特性關聯容器map、set的使用

參考文獻《C++ Primer》 一、關聯容器概述 1.1 關聯容器的概念 關聯容器支援高效的查詢與訪問,主要的關聯容器為map與set這兩個。其中map主要提供的是鍵-值的操作,比如

C++11特性decltype關鍵字

decltype簡介 我們之前使用的typeid運算子來查詢一個變數的型別,這種型別查詢在執行時進行。RTTI機制為每一個型別產生一個type_info型別的資料,而typeid查詢返回的變數相應type_info資料,通過name成員函式返回型別的名稱。同時在C++1

VSVC2010常用的C++11特性

static_assert 宣告 static_assert宣告在編譯時測試軟體斷言,這與在執行時進行測試的其他斷言機制不同。如果斷言失敗,則編譯也將失敗,且系統將發出指定的錯誤訊息。 const int nValue = 3; static_assert(nValue

C++ 11特性

erro 匹配 編譯速度 void con 函數對象 roc _each 文件 1.auto:自動類型推導 編譯時對變量進行類型推導,不會對程序的運行效率造成影響; 不會影響編譯速度,因為編譯時也要右側推導,然後判斷與左側是否匹配; 通過初始化表達式

升級 gcc g++ 版本 支援-std=c++11 特性

CentOS 6.6 升級GCC G++ (當前最新GCC/G++版本為v6.1.0) 或者 新增yum 的 repo 檔案 也不行, 只能更新到 4.4.7! 採取手動編譯安裝了 1、 獲取安裝包並解壓 wget http://ftp.gnu.org/gnu/g

C++——VisualStudio的c++11特性(一)

前言 檢視官網https://msdn.microsoft.com/library/ 從VisualStudio2010講起,主要是針對c++11特性來研究vs開發c++的IDE的強大之處 VisualStudio2010下載release(釋出版本)地址:https://docs.mi

【程式設計技巧與C++11特性】總結

一,程式設計技巧 1.1排序效能問題 C ++的排序函式有兩種用法: 傳入一個functor物件; 直接傳入一個排序函式。 #include <iostream> #include <ctime> #include <algorithm&

c++ 11 特性之auto

 auto並沒有讓C++成為弱型別語言,也沒有弱化變數什麼,只是使用auto的時候,編譯器根據上下文情況,確定auto變數的真正型別。 auto在C++14中可以作為函式的返回值 #include<iostream> auto add(int x,int y) { &nb

C++11 —— 判斷 tuple 是否包含某個資料型別

  如標題所提到的,這個問題也讓我煩惱了一會,前兩天在某個論壇上(現在找不到出處了)看到有如下程式碼的解決辦法,非常巧妙,在此整理並記錄出來做備忘。 #include <type_traits> #include <tuple> #include <iostream>

[轉載]Visual Studio, GCC, Clang, Intel 對 C++11 特性的支援一覽表

參與翻譯(3人):throwable, jimmyjmh, Khiyuan距離我上次對C++11支援的不同編譯器的比較已經有大半年了。這次我來根據這些預覽版的編譯器的文件來看下它們是如何堆砌起來的。GCC的下個版本是4.8,以及Clang即將到來的版本是3.3 。如果你使用Visual Studio 2012

c++11計時chrono

#include <chrono> std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now(); 某段程式碼 std:

c++11特性裡的多執行緒thread的用法

建立和啟動一條C++執行緒就像在C++原始碼中新增執行緒標頭檔案那麼簡便。我們來看看如何建立一個簡單的帶執行緒的HelloWorld: #include <iostream> #include <thread> using namespace std

C++三大特性封裝,繼承,多型

     封裝可以隱藏實現細節,使得程式碼模組化,繼承可以擴充套件已存在的模組,它們目的都是為了:程式碼重用。而多型是為了實現另一個目的:介面重用。 什麼是多型?      eg:開門,開窗戶,開電腦,這裡“

C++11(一)在類的定義時初始化非靜態變數

前言 距離C++11標準釋出時間大約有六年了,但是C++11的諸多特性並未在程式界達到普及的狀態,甚至在一些“老程式設計師”看來,由於他們不了C++11標準新加入的內容,一些正常的程式常常被當做BUG處理,接下來我們就看看C++11加了那些特性,今天我們來測試

如何寫cmake使其包含c++11特性 (-std=c++11如何寫進cmakeList.txt)

g++ 4.8.2 cmake 2.8 之前寫cmkae編譯帶有c++11特性的程式碼有這麼一句: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 但是總會出現cc1plus: error: unrecognized

C++語言特性建構函式,解構函式,虛擬函式,行內函數,靜態成員函式,過載,覆蓋,隱藏

C++中class預設屬性為private, struct預設屬性為public 建構函式:        1.初始化物件成員;        2.建立類物件;        由於虛擬函式是建立在物件的基礎上的,因此建構函式不能宣告為虛擬函式;虛擬函式是在執行的時候才識別,

c++11特性之std::thread--初識二

上篇部落格《c++11特性之std::thread–初識》初步介紹了std::thread,並且介紹了幾個成員函式。 最後的一段程式碼留了點懸念,就是vs2015會報錯,錯誤如下: error

C#學習筆記(三)—–C#高階特性列舉型別和迭代

C#學習筆記(三)—–try語句和異常 列舉型別 enumerator是隻讀的、只能在序列的值上向前移動的遊標。一個enumerator是一個實現了下列任一介面的物件: ①System.Collections.IEnumerator ②System.C