1、标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛型算法:因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上。
2、accumulate算法返回累加的结果,其返回类型就是其第三个实参的类型。用于指定累加起始值的第三个实参是必要的,因为accumulate对将要累加的元素类型一无所知,因此,除此之外,没有别的办法创建合适的起始值或者关联的类型。
3、find_first_of算法带有两对迭代器参数来标记两段元素范围,在地第一段范围内查找与第二段范围中任意元素匹配的元素,然后返回一个迭代器,指向第一个匹配的元素。如果找不到匹配的元素,则返回第一个范围的end迭代器。
4、在下面两行代码中,fill_n函数每写入一个值,都会通过back_inserter生成的插入迭代器实现,效果相当于在vec上调用push_back,在vec末尾添加10个元素,每个元素的值都是0。
vector<int> vec; //empty vector //ok:back_inserter creates an inserter iterator that adds elements to vec fill_n(back_inserter(vec), 10, 0); //appends 10 elements to vec
5、sort算法带有两个迭代器实参,指出要排序的元素范围,这个算法使用小于(<)操作符比较元素。
6、unique算法删除相邻的重复元素,然后重新排序输入范围内的元素,并且返回一个迭代器,表示无重复的值范围的结束。调用unique“删除”了相邻的重复值,给“删除”加上引号是因为unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前端,从而覆盖相邻的重复元素,unique返回的迭代器指向超出无重复的元素范围末端的下一个位置。
7、算法不直接修改容器的大小。如果需要添加或删除元素,则必须使用容器操作。
8、谓词是做某些检测的函数,返回用于条件判断的类型,指出条件是否成立。这个谓词函数必须接受两个实参,实参的类型必须与元素类型相同,并返回一个可用作条件检测的值。
9、(1)插入迭代器(insert iterator):这类迭代器与容器绑定在一起,实现在容器中插入元素的功能;(2)iostream迭代器(iostream iterator):这类迭代器可与输入或输出流绑定在一起,用于迭代遍历所关联的IO流;(3)反向迭代器(reverse iterator):这类迭代器实现向后遍历,而不是向前的遍历。所有容器类型都定义了自己的reverse_iterator类型,由rbegin和rend成员函数返回。
10、在创建ostream_iterator对象时,可提供第二个(可选的)实参,指定将元素写入输出流时使用的分隔符。分隔符必须是C风格字符串。因为它是C风格的字符串,所以必须以空子符结束;否则,其行为将是为定义的。
ostream_iterator<T> in(strm, delim);
11、反向迭代器一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而–运算将访问下一个元素。
12、为了以降序排列vector,只需向sort传递一对反向迭代器:
sort(vec.rbegin(), vec.rend());
13、由于不能反向遍历,因此流迭代器不能创建反向迭代器。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。