泛型算法 可以理解为方便容器使用的一些接口。
大部分算法都放在algorithm中,而泛型算法放在 numeric 头文件中。泛型算法主要包括只读算法、写容器算法和重新排序算法,与迭代器联系紧密。
只读算法:
1 int num = accumulate(vec.begin(),vec.end(),3);//前两个为求和的范围,第三个为和的初始值
2
3 //equal 用于确定两个算法是否保存相同的值
4 equal(vec1.begin(),vec1.end(),vec2.begin());//equal的一个基本假定:第二个序列至少比第一个长
写容器算法:
1 fill(iter1, iter2, x);//将iter1、iter2之间的数重置为x
2
3 fill_n(iter, n, x);//从iter开始的n个数重置为x
4
5 //back_insert 插入迭代器
6 fill_n(back_insert(vec), n, x);//在vec后添加n个x
7
8 copy(vec1.begin(), vec1.end(), vec2);//将vec1的内容拷贝到vec2,拷贝的目的序列大小不必输入序列小
9
10 replace(vec.begin(), vec.end(), m, n);//将范围内m替换为n
11
12 replace_copy(vec.begin(), vec.end(), back_insert(vec1), m, n);//vec不变,vec2中插入一份替换后的拷贝值
重排算法:
1 //先排好序后,将重复的放在最后边,然后删除 2 3 sort(words.begin(), words.end()); 4 5 vector<string>::iterator end_unique = unique(words.begin(), words.end()); 6 7 words.erase(end_unique, words.end());
谓词:sort中自己定义的第三项比较函数,谓之谓词。
lambda表达式:貌似很重要,没细看,用到再补充。
迭代器:
插入迭代器,back_inserter、front_inserter、inserter;
流迭代器,istream_iterator、ostream_iterator;
反向迭代器,forward_list、rbegin、rend、crbegin、crend,从尾元素向首元素反向移动, ++it/--it;
移动迭代器,make_move_iterator。