C++ list容器merge算法的使用以及注意事项.docx
第
C++?list容器merge算法的使用以及注意事项
目录list容器merge算法的使用注意事项(1)voidmerge(listx)(2)voidmerge(lst2,comp)总结
list容器merge算法的使用注意事项
C++的list容器merge算法有多种形式,这里仅讨论一下两种:
(1)voidmerge(listx)
该算法将一个有序list容器加入另一个有序list容器中,且两个list容器必须都为逆序或顺序,这是很容易不注意导致报错的主要原因。
listlst1{111,222,333,444};//顺序
listlst2{2411,4,3,2,1};//逆序
lst1.merge(lst2);
for(autobeg=lst1.begin();beg!=lst1.end();++beg)
cout*beg;
coutendl;
(2)voidmerge(lst2,comp)
该算法可以自定义比较类型,需要一个能返回bool型的predict。
boolmycomparison(doublefirst,doublesecond)
{return(int(first)int(second));}
intmain()
std::listfirst,second;
first.push_back(3.1);
first.push_back(2.2);
first.push_back(2.9);
second.push_back(3.7);
second.push_back(7.1);
second.push_back(1.4);
first.sort();
second.sort();
first.merge(second);
//使用merge后插入的list都为空
second.push_back(2.1);
first.merge(second,mycomparison);
std::cout“firstcontains:”;
for(std::list::iteratorit=first.begin();it!=first.end();++it)
std::cout*it;
std::cout‘\n;
return0;
}
需要注意的是:
merge默认是使用运算符如果通过pred修改为使用运算符时相应的两个list容器中的元素也应该是按照从大到小的顺序排列否则会触发错误
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。