c++泛型算法扩展和迭代器、反向迭代器

it2025-06-16  4

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;

最新回复(0)