cout << "=====================插入迭代器================" << endl;
back_inserter:创建一个使用push_back的迭代器
front_inserter:创建一个使用push_front的迭代器
inserter:创建一个使用insert的迭代器,第二个参数必须是指向给定容器的迭代器
vector<int> vec{ 1,2,3,4,5,6,7,8 };
vector<int> vec2;
copy(vec.begin(), vec.end(), back_inserter(vec2));
for_each(vec2.begin(), vec2.end(), [](const int& num) {cout << num << " "; });
cout << endl;
list<int> lis;
copy(vec.begin(), vec.end(), front_inserter(lis));
for_each(lis.begin(), lis.end(), [](const int& num) {cout << num << " "; });
cout << endl;
list<int> lis2;
copy(vec.begin(), vec.end(), inserter(lis2,lis2.begin()));
for_each(lis2.begin(), lis2.end(), [](const int& num) {cout << num << " "; });
cout << endl;
cout << "=====================反向迭代器================" << endl;
反向迭代器:rbegin()、rend()从容器尾部开始计算,也是使用++
auto nump = find(vec2.rbegin(), vec2.rend(), 8);
cout << *nump << endl;
cout << "=====================命名规范================" << endl;
_if:一般为判断是否为真,而且一般都有和它类似的算法,例如find_if和find
_copy:一般会拷贝元素
cout << "=====================泛型算法架构================" << endl;
使用了5类迭代器
输入迭代器:可以读取序列中的元素(可以理解为从内存往代码输入)
输出迭代器:只写不读
前向迭代器:可以读写
双向迭代器:可以正反方向读写序列中的元素
随机访问迭代器:提供在常量时间内访问序列中任意元素的能力。
算法参数模式
args(beg, end, other args);
args(beg, end, dest, other args);
args(beg, end, beg2, other args);
args(beg, end, beg2, end2, other args);
cout << "=====================特定容器算法================" << endl;
对于list和forward_list来说
lst.merge(lst2):将lst2的元素合并入lst。lst和lst2都必须是有序的。
lst.merge(lst2,comp):元素将从lst2中删除。在合并之后lst2变为空。
lst.remove(val)、lst.remove_if(pred):调用erase删除掉与给定值相等或令一元谓词为真的每个元素。
lst.reverse():反转lst中的元素顺序
lst.splice(p,lst2):将lst2中的元素移动到lst的p之前的位置。
splice参数还可以是(p,lst2,p2)、(p,lst2,b,e),p2为将指定的元素移动到lst中,或p2后边的元素移动到flst中。b,e为lst2的合法范围
lis2.reverse();//翻转lis2
for_each(lis2.begin(), lis2.end(), [](const int& num) {cout << num << " "; });
cout << endl;