C++常用術語及其英文翻譯的含義和簡單用途總結(八)

來源:互聯網
上載者:User

標籤:c++常用術語   c++   

(1)back_inserter 這是一個迭代器適配器,它接受一個指向容器的引用,產生一個插入迭代器,當我們通過此迭代器賦值時,賦值運算子會調用push_back將一個具有給定值的元素添加到容器中。

          例如:   vector<int> vec;    //空向量

                        auto it = back_inserter(vec);      //通過插入迭代器 it 賦值會將元素添加到vec中

                        *it = 42;       //vec中現在有一個元素,值為42

(2)雙向迭代器(bidirectional iterator):支援前向迭代器的所有操作,還具有用 -- 在序列中反向移動的能力。

(3)二元謂詞(binary predicate)接受兩個參數的謂詞。謂詞是一個可調用的運算式,其返回結果是一個能用作條件的值。

(4)bind 標準庫函數,可將bind看做一個通用的函數適配器,它接受一個可調用對象,產生一個新的可調用對象來“適應”原對象的參數列表。bind將一個或多個參數綁定到一個可調用運算式。bind 定義在標頭檔functional 中。

調用bindde 一般形式為:

          auto newCallable = bind(callable, arg_list);

其中,newCallable 本身是一個可調用對象,arg_list是一個逗號分隔的參數列表,對應給定的callable的參數。即,當我們調用newCallable時,newCallable會調用callable,並傳遞給它arg_list中的參數。arg_list中的參數可能包含形如_n的名字,其中n是一個整數。這些參數是“預留位置”,表示newCallable的參數,它們佔據了傳遞給newCallable的參數的“位置”。數值n表示產生可調用對象中參數的位置:_1為newCallable的第一個參數,_2為第二個參數,以此類推。

(5)lambda 運算式 (lambda expression):可調用的代碼單元。一個lambda類似一個未命名的內嵌函式。一個lambda以一個捕獲列表開始,此列表允許lambda訪問所在的函數中的變數。類似函數,lambda有一個(可能為空白的)參數列表、一個傳回型別和一個函數體。lambda可以忽略傳回型別。如果函數體是一個單一的return語句,傳回型別就從返回對象的類型推斷。否則,忽略的傳回型別預設為void。

 一個lambda必須使用尾置返回來指定傳回型別,其一般形式為:

              [capture list] (parameter list) -> rerurn type { function body }

其中,我們可以忽略參數列表和傳回型別,但必須永遠包含捕獲列表和函數體。

auto f = [ ] {return 42;};  //此例中,我們定義了一個可調用對象f,它不接受參數,返回42//lambda的調用方式與普通函數的調用方式相同,都是使用調用運算子:cout<<f()<<endl;       //列印42
(6)可調用對象(callable object)可以出現在調用運算子左邊的對象。函數、函數指標、lambda運算式以及重載了函數調用運算子的類的對象都是可調用對象。

(7)cref/ref 標準庫函數,返回一個可拷貝的對象,其中儲存了一個指向不可拷貝類型的const對象的引用。它也是定義在標頭檔functional中的。

(8)front_inserter 迭代器適配器,給定一個容器,產生一個push_front向容器開始位置添加元素的插入迭代器。

(9)泛型演算法(generic algorithm)類型無關的演算法。

(10)前向迭代器(forward iterator)可以讀寫元素,但不必支援--的迭代器。

(11)輸入迭代器(input iterator)可以讀但不能寫序列中元素的迭代器。

(12)插入迭代器(insert iterator)迭代器適配器,產生一個迭代器,該迭代器使用容器操作向給定容器添加元素。

(13)插入器(inserter)迭代器適配器,接受一個迭代器和一個指向容器的引用,產生一個插入迭代器,該插入迭代器用insert在給定迭代器指向的元素之前的位置添加元素。

(14)移動迭代器(move iterator)迭代器適配器,產生一個迭代器,該迭代器移動而不是拷貝元素。

(15)istream_iterator 讀取輸入資料流的流迭代器。

例如:下面是一個用istream_iterator 從標準輸入中讀取資料,存入一個vector中的例子:

istream_iterator<int> in_iter(cin);     //從cin讀取intistream_iterator<int> eof;      //istream的尾後迭代器while (in_iter != eof)              //當資料可供讀取時{      //後置遞增運算讀取流,返回迭代器的舊值      //解引用迭代器,獲得從流讀取的前一個值      vec.push_back(*in_iter++);
可以把程式改為如下形式,用一對錶示元素範圍的迭代器來構造vec。

istream_iterator<int> in_iter,eof; //從cin讀取intvector<int> vec(in_iter, eof);  //從迭代器範圍構造vec
(16)ostream_iterator 寫輸出資料流的迭代器。

(17)隨機訪問迭代器(random-access iterator)支援雙向迭代器的所用操作再加上比較迭代器值的關係運算子、下標運算子和迭代器上的算術運算,因此支援隨機訪問元素。

(18)反向迭代器(reverse iterator)在序列中反向移動的迭代器。這些迭代器交換了++ 和 -- 的含義。

(19)流迭代器(istream iterator)可以綁定到一個流的迭代器。

(20)一元謂詞(unary predicate)接受一個參數的謂詞。謂詞是一個可調用的運算式,其返回結果是一個能用作條件的值。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

C++常用術語及其英文翻譯的含義和簡單用途總結(八)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.