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

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章