您的位置:首页 > 编程语言 > C语言/C++

C++常用术语及其英文翻译的含义和简单用途总结(八)

2015-08-25 13:11 1021 查看
(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)接受一个参数的谓词。谓词是一个可调用的表达式,其返回结果是一个能用作条件的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: