algorithm库函数集合:
1.不修改内容的序列操作:
adjacent_find查找两个相邻(Adjacent)的等价(Identical)元素all_ofC++11检测在给定范围中是否所有元素都满足给定的条件any_ofC++11检测在给定范围中是否存在元素满足给定条件count返回值等价于给定值的元素的个数count_if返回值满足给定条件的元素的个数equal返回两个范围是否相等find返回第一个值等价于给定值的元素find_end查找范围A中与范围B等价的子范围最后出现的位置find_first_of查找范围A中第一个与范围B中任一元素等价的元素的位置find_if返回第一个值满足给定条件的元素find_if_notC++11返回第一个值不满足给定条件的元素for_each对范围中的每个元素调用指定函数mismatch返回两个范围中第一个元素不等价的位置none_ofC++11检测在给定范围中是否不存在元素满足给定的条件search在范围A中查找第一个与范围B等价的子范围的位置search_n在给定范围中查找第一个连续n个元素都等价于给定值的子范围的位置2.修改内容的序列操作:
copy将一个范围中的元素拷贝到新的位置处copy_backward将一个范围中的元素按逆序拷贝到新的位置处copy_ifC++11将一个范围中满足给定条件的元素拷贝到新的位置处copy_nC++11拷贝 n 个元素到新的位置处fill将一个范围的元素赋值为给定值fill_n将某个位置开始的 n 个元素赋值为给定值generate将一个函数的执行结果保存到指定范围的元素中,用于批量赋值范围中的元素generate_n将一个函数的执行结果保存到指定位置开始的 n 个元素中iter_swap交换两个迭代器(Iterator)指向的元素moveC++11将一个范围中的元素移动到新的位置处move_backwardC++11将一个范围中的元素按逆序移动到新的位置处random_shuffle随机打乱指定范围中的元素的位置remove将一个范围中值等价于给定值的元素删除remove_if将一个范围中值满足给定条件的元素删除remove_copy拷贝一个范围的元素,将其中值等价于给定值的元素删除remove_copy_if拷贝一个范围的元素,将其中值满足给定条件的元素删除replace将一个范围中值等价于给定值的元素赋值为新的值replace_copy拷贝一个范围的元素,将其中值等价于给定值的元素赋值为新的值replace_copy_if拷贝一个范围的元素,将其中值满足给定条件的元素赋值为新的值replace_if将一个范围中值满足给定条件的元素赋值为新的值reverse反转排序指定范围中的元素reverse_copy拷贝指定范围的反转排序结果rotate循环移动指定范围中的元素rotate_copy拷贝指定范围的循环移动结果shuffleC++11用指定的随机数引擎随机打乱指定范围中的元素的位置swap交换两个对象的值swap_ranges交换两个范围的元素transform对指定范围中的每个元素调用某个函数以改变元素的值unique删除指定范围中的所有连续重复元素,仅仅留下每组等值元素中的第一个元素。unique_copy拷贝指定范围的唯一化(参考上述的 unique)结果3.划分操作:
is_partitionedC++11检测某个范围是否按指定谓词(Predicate)划分过partition将某个范围划分为两组partition_copyC++11拷贝指定范围的划分结果partition_pointC++11返回被划分范围的划分点stable_partition稳定划分,两组元素各维持相对顺序4.排序操作:
is_sortedC++11检测指定范围是否已排序is_sorted_untilC++11返回最大已排序子范围nth_element部份排序指定范围中的元素,使得范围按给定位置处的元素划分partial_sort部份排序partial_sort_copy拷贝部分排序的结果sort排序stable_sort稳定排序5.二分法查找操作:
binary_search判断范围中是否存在值等价于给定值的元素equal_range返回范围中值等于给定值的元素组成的子范围lower_bound返回指向范围中第一个值大于或等于给定值的元素的迭代器upper_bound返回指向范围中第一个值大于给定值的元素的迭代器6.集合操作:
includes判断一个集合是否是另一个集合的子集inplace_merge就绪合并merge合并set_difference获得两个集合的差集set_intersection获得两个集合的交集set_symmetric_difference获得两个集合的对称差set_union获得两个集合的并集7.堆操作:
is_heap检测给定范围是否满足堆结构is_heap_untilC++11检测给定范围中满足堆结构的最大子范围make_heap用给定范围构造出一个堆pop_heap从一个堆中删除最大的元素push_heap向堆中增加一个元素sort_heap将满足堆结构的范围排序8.最大/最小操作:
is_permutationC++11判断一个序列是否是另一个序列的一种排序lexicographical_compare比较两个序列的字典序max返回两个元素中值最大的元素max_element返回给定范围中值最大的元素min返回两个元素中值最小的元素min_element返回给定范围中值最小的元素minmaxC++11返回两个元素中值最大及最小的元素minmax_elementC++11返回给定范围中值最大及最小的元素next_permutation返回给定范围中的元素组成的下一个按字典序的排列prev_permutation返回给定范围中的元素组成的上一个按字典序的排列一,巡防算法
for_each(容器起始地址,容器结束地址,要执行的方法)
- #include <iostream>
- #include <algorithm>
- #include <vector>
-
- using namespace std;
-
- template<class T>
- struct plus2
- {
- void operator()(T&x)const
- {
- x+=2;
- }
-
- };
-
- void printElem(int& elem)
- {
- cout << elem << endl;
- }
-
-
- int main()
- {
- int ia[]={0,1,2,3,4,5,6};
- for_each(ia,ia+7,printElem);
-
- int ib[]={7,8,9,10,11,12,13};
- vector<int> iv(ib,ib+7);
- for_each(iv.begin(),iv.end(),plus2<int>());
- for_each(iv.begin(),iv.end(),printElem);
-
-
- return 0;
- }
二,find算法
int *find(int *begin,int *end,int value)
前闭后合的区间 begin,end中,查找value如果查找到了就返回第一个符合条件的元素,否则返回end指针
- #include <iostream>
- #include <algorithm>
-
- using namespace std;
-
- void printElem(int& elem)
- {
- cout << elem << endl;
- }
-
-
- int main()
- {
- int ia[]={0,1,2,3,4,5,6};
-
- int *i= find(ia,ia+7,9);
- int *j= find(ia,ia+7,3);
- int *end=ia+7;
- if(i == end)
- cout<<"没有找到元素 9"<<endl;
- else
- cout<<"找到元素9"<<endl;
-
- if(j == end)
- cout<<"没有找到元素 3"<<endl;
- else
- cout<<"找到元素"<<*j<<endl;
- return 0;
- }
三,数值算法
包含在<numeric>头文件中
- #include <iostream>
- #include <numeric> //数值算法
- #include <vector>
- #include <functional>
- #include <iterator>
-
- #include <math.h>
- using namespace std;
-
- int main()
- {
- int ia[]={1,2,3,4,5};
- vector<int> iv(ia,ia+5);
-
- cout<<accumulate(iv.begin(),iv.end(),0)<<endl;
- cout<<accumulate(iv.begin(),iv.end(),0,minus<int>())<<endl;
-
- cout<<inner_product(iv.begin(),iv.end(),iv.begin(),10)<<endl;
- cout<<inner_product(iv.begin(),iv.end(),iv.begin(),10,minus<int>(),plus<int>())<<endl;
-
- ostream_iterator<int> oite(cout," ");
- partial_sum(iv.begin(),iv.end(),oite);
-
- cout<<endl;
- partial_sum(iv.begin(),iv.end(),oite,minus<int>());
-
- cout<<endl;
- adjacent_difference(iv.begin(),iv.end(),oite);
-
- cout<<endl;
- adjacent_difference(iv.begin(),iv.end(),oite,plus<int>());
-
-
- cout<<endl;
- cout<<pow(10,3)<<endl;
-
-
-
-
-
-
-
-
- return 0;
- }
四,基本算法
- #include <iostream>
- #include <algorithm>
- #include <vector>
-
- using namespace std;
-
- template<typename T>
- struct display
- {
- void operator()(const T &x)const
- {
- cout<<x<<" ";
- }
-
- };
-
-
- int main()
- {
- int ia[]={0,1,2,3,4,5,6,7,8};
- vector<int> iv1(ia,ia+5);
- vector<int> iv2(ia,ia+9);
-
- pair<vector<int>::iterator,vector<int>::iterator> pa;
- pa=mismatch(iv1.begin(),iv1.end(),iv2.begin());
- cout<<"两个数组不同点--第一个数组点:"<<*(pa.first)<<endl;
- cout<<"两个数组不同点--第二个数组点:"<<*(pa.second)<<endl;
-
-
- if(pa.first == iv1.end())
- cout<<"第一个数组与第二个数组匹配"<<endl;
-
- cout<<equal(iv1.begin(),iv1.end(),iv2.begin())<<endl;
- cout<<equal(iv1.begin(),iv1.end(),&ia[3])<<endl;
- cout<<equal(iv1.begin(),iv1.end(),&ia[3],less<int>())<<endl;
-
- fill(iv1.begin(),iv1.end(),9);
- for_each(iv1.begin(),iv1.end(),display<int>());
- cout<<endl;
-
- fill_n(iv1.begin(),3,6);
- for_each(iv1.begin(),iv1.end(),display<int>());
- cout<<endl;
-
-
- vector<int>::iterator ite1=iv1.begin();
- vector<int>::iterator ite2=ite1;
- advance(ite2,3);
-
- iter_swap(ite1,ite2);
- for_each(iv1.begin(),iv1.end(),display<int>());
-
- cout<<"\nmax:"<<max(*ite1,*ite2)<<endl;
- cout<<"min:"<<min(*ite1,*ite2)<<endl;
-
- swap(*ite1,*ite2);
- for_each(iv1.begin(),iv1.end(),display<int>());
-
-
- cout<<endl;
- string stra1[]={"a","b","c"};
- string stra2[]={"d","e","f"};
-
- cout<<lexicographical_compare(stra1,stra1+2,stra2,stra2+2)<<endl;
- cout<<lexicographical_compare(stra1,stra1+2,stra2,stra2+2,greater<string>())<<endl;
-
-
- return 0;
- }
五,copy()对不同容器复制;关于输出区间与输入区间重叠的讨论五,copy()对不同容器复制;关于输出区间与输入区间重叠的讨论
- #include <iostream>
- #include <algorithm>
- #include <deque>
-
- using namespace std;
- template<class T>
- struct display
- {
- void operator()(const T &x)const
- {
- cout<<x<<" ";
- }
- };
-
- int main()
- {
-
- int ia1[]={0,1,2,3,4,5,6,7,8};
- copy(ia1+2,ia1+7,ia1);
- for_each(ia1,ia1+9,display<int>());
- cout<<endl;
-
-
- int ia2[]={0,1,2,3,4,5,6,7,8};
- copy(ia2+2,ia2+7,ia2+4);
- for_each(ia2,ia2+9,display<int>());
- cout<<endl;
-
-
- int ia3[]={0,1,2,3,4,5,6,7,8};
- deque<int> id(ia3,ia3+9);
- deque<int>::iterator first=id.begin();
- deque<int>::iterator last=id.end();
- deque<int>::iterator result=id.begin();
- ++++first;
- cout<<*first<<endl;
- ----last;
- cout<<*last<<endl;
- cout<<*result<<endl;
- copy(first,last,result);
- for_each(id.begin(),id.end(),display<int>());
- cout<<endl;
-
-
- int ia4[]={0,1,2,3,4,5,6,7,8};
- deque<int> ide(ia4,ia4+9);
- deque<int>::iterator first1=ide.begin();
- deque<int>::iterator last1=ide.end();
- deque<int>::iterator result1=ide.begin();
- advance(result1,4);
- ++++first1;
- cout<<*first1<<endl;
- ----last1;
- cout<<*last1<<endl;
- cout<<*result1<<endl;
- copy(first1,last1,result1);
- for_each(ide.begin(),ide.end(),display<int>());
- cout<<endl;
-
-
-
- return 0;
- }
【注意】如果以vector 容器替代deque容器则每种情况都正确,因为vector迭代器其实是个源生指针,调用的copy()算法以mommove()执行实际复制。
copy_backward(first,last,result); //逆向复制,将迭代器first - last位置的元素逆向复制到 从result-1开始的逆向区间
补充: 原型:void *memmove( void * dest, const void * src, size_t count );
用法:#include <string.h>或#include <memory.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针。采取先拷贝再复制的方式,有效解决了dest和src区域重叠问题
相关函数:memset、memcpy、strcpy 参考博文:点此进入
实例
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char s[]="Golden Global View";
- memmove(s,s+7,strlen(s)+1-7);
- printf("%s",s);
-
- return 0;
- }
六,Set方法
- #include <iostream>
- #include <set>
- #include <algorithm>
- #include <iterator>
- using namespace std;
-
- template <class T>
- struct display
- {
- void operator()(const T &x)
- {
- cout<<x<<" ";
- }
-
- };
- int main()
- {
- int ia1[]={1,3,5,7,9,11};
- int ia2[]={1,1,2,3,5,8,13};
-
- multiset<int> s1(ia1,ia1+6);
- multiset<int> s2(ia2,ia2+7);
- for_each(s1.begin(),s1.end(),display<int>());
- cout<<endl;
- for_each(s2.begin(),s2.end(),display<int>());
- cout<<endl;
-
- multiset<int>::iterator first1 = s1.begin();
- multiset<int>::iterator last1 = s1.end();
- multiset<int>::iterator first2 = s2.begin();
- multiset<int>::iterator last2 = s2.end();
-
- cout<<"union of s1 and s2: ";
-
- set_union(first1,last1,first2,last2,ostream_iterator<int>(cout," "));
- cout<<endl;
-
- first1=s1.begin();
- first2=s2.begin();
- cout<<"Intersection of s1 and s2: ";
-
- set_intersection(first1,last1,first2,last2,ostream_iterator<int>(cout," "));
- cout<<endl;
-
- first1=s1.begin();
- first2=s2.begin();
- cout<<"Intersection of s1 and s2: ";
-
- set_difference(first1,last1,first2,last2,ostream_iterator<int>(cout," "));
- cout<<endl;
-
- first1=s1.begin();
- first2=s2.begin();
- cout<<"Intersection of s1 and s2: ";
-
-
- set_symmetric_difference(first1,last1,first2,last2,ostream_iterator<int>(cout," "));
- cout<<endl;
-
-
- return 0;
- }
七,其他算法(运算逻辑相对单纯的算法)
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <functional>
- #include <vector>
-
-
- using namespace std;
-
- template <class T>
- struct display
- {
- void operator()(const T &x)const
- {
- cout<<x<<" ";
- }
-
- };
-
- struct even
- {
- bool operator()(int x)const
- {
- return x%2?false:true;
- }
- };
-
- class even_by_two
- {
- private:
- static int _x;
- public:
- int operator()()const
- {
- return _x+=2;
- }
-
- };
- int even_by_two::_x=0;
-
- int main()
- {
- int ia[]={0,1,2,3,4,5,6,6,6,7,8};
- vector<int> iv(ia,ia+sizeof(ia)/sizeof(int));
-
-
- cout<<*adjacent_find(iv.begin(),iv.end())<<endl;
- cout<<*adjacent_find(iv.begin(),iv.end(),equal_to<int>())<<endl;
-
- cout<<count(iv.begin(),iv.end(),6)<<endl;
- cout<<count_if(iv.begin(),iv.end(),bind2nd(less<int>(),7))<<endl;
-
- cout<<*find(iv.begin(),iv.end(),4)<<endl;
-
- cout<<*find_if(iv.begin(),iv.end(),bind2nd(greater<int>(),2))<<endl;
-
- vector<int> iv2(ia+6,ia+8);
-
- for(int i=0;i<iv2.size();++i)
- cout<<iv2[i]<<" ";
-
- cout<<endl;
-
- cout<<"find_end:"<<*(find_end(iv.begin(),iv.end(),iv2.begin(),iv2.end())+3)<<endl;
-
- cout<<"find_first_of:"<<*(find_first_of(iv.begin(),iv.end(),iv2.begin(),iv2.end())+3)<<endl;
-
-
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- generate(iv2.begin(),iv2.end(),even_by_two());
- for_each(iv2.begin(),iv2.end(),display<int>());
- cout<<endl;
-
-
- generate_n(iv.begin(),3,even_by_two());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- remove(iv.begin(),iv.end(),6);
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- vector<int> iv3(12);
- remove_copy(iv.begin(),iv.end(),iv3.begin(),6);
- for_each(iv3.begin(),iv3.end(),display<int>());
- cout<<endl;
-
-
- remove_if(iv.begin(),iv.end(),bind2nd(less<int>,6));
- for_each(iv1.begin(),iv1.end(),display<int>());
- cout<<endl;
-
-
-
- remove_copy_if(iv.begin(),iv.end(),iv3.begin(),bind2nd(less<int>,7));
- for_each(iv3.begin(),iv3.end(),display<int>());
- cout<<endl;
-
-
- return 0;
- }
第二段算法示例:
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <functional>
-
- using namespace std;
-
- template <class T>
- struct display
- {
- void operator()(const T &x)const
- {
- cout<<x<<" ";
- }
-
- };
-
-
- int main()
- {
- int ia[]={8,10,7,8,6,6,7,8,6,7,8};
- vector<int> iv(ia,ia+sizeof(ia)/sizeof(int));
-
-
- replace(iv.begin(),iv.end(),6,3);
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
- vector<int> iv2(12);
-
- replace_copy(iv.begin(),iv.end(),iv2.begin(),3,5);
- for_each(iv2.begin(),iv2.end(),display<int>());
- cout<<endl;
-
-
- replace_if(iv.begin(),iv.end(),bind2nd(less<int>(),5),2);
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- replace_copy_if(iv.begin(),iv.end(),iv2.begin(),bind2nd(equal_to<int>(),8),9);
- for_each(iv2.begin(),iv2.end(),display<int>());
- cout<<endl;
-
-
- reverse(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- reverse_copy(iv.begin(),iv.end(),iv2.begin());
- for_each(iv2.begin(),iv2.end(),display<int>());
- cout<<endl;
-
-
- rotate(iv.begin(),iv.begin()+4,iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- rotate_copy(iv.begin(),iv.begin()+5,iv.end(),iv2.begin());
- for_each(iv2.begin(),iv2.end(),display<int>());
- cout<<endl;
-
-
-
- int ia2[3]={2,8};
- vector<int> iv3(ia2,ia2+2);
- cout<<*search(iv.begin(),iv.end(),iv3.begin(),iv3.end())<<endl;
-
-
- cout<<*search_n(iv.begin(),iv.end(),2,8)<<endl;
-
-
- cout<<*search_n(iv.begin(),iv.end(),3,8,less<int>())<<endl;
-
- swap_ranges(iv3.begin(),iv3.end(),iv.begin());
- cout<<"iv:";
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
- cout<<"iv3:";
- for_each(iv3.begin(),iv3.end(),display<int>());
- cout<<endl;
-
-
- transform(iv.begin(),iv.end(),iv.begin(),bind2nd(minus<int>(),2));
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- transform(iv.begin(),iv.end(),iv.begin(),iv.begin(),plus<int>());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- return 0;
- }
第三段算法示例:
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <functional>
-
- using namespace std;
-
- template <class T>
- struct display
- {
- void operator()(const T &x)const
- {
- cout<<x<<" ";
- }
-
- };
- struct even
- {
- bool operator()(int x)const
- {
- return x%2?false:true;
- }
- };
-
- int main()
- {
- int ia[]={0,1,2,3,4,5,6,6,6,7,8};
- vector<int> iv(ia,ia+sizeof(ia)/sizeof(int));
- vector<int> iv2(ia+4,ia+8);
- vector<int> iv3(15);
-
- cout<<*max_element(iv.begin(),iv.end())<<endl;
- cout<<*min_element(iv.begin(),iv.end())<<endl;
-
-
- cout<<includes(iv.begin(),iv.end(),iv2.begin(),iv2.end())<<endl;
-
-
- merge(iv.begin(),iv.end(),iv2.begin(),iv2.end(),iv3.begin());
- for_each(iv3.begin(),iv3.end(),display<int>());
- cout<<endl;
-
-
- partition(iv3.begin(),iv3.end(),even());
- for_each(iv3.begin(),iv3.end(),display<int>());
- cout<<endl;
-
-
- unique(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
-
- unique_copy(iv.begin(),iv.end(),iv3.begin());
- for_each(iv3.begin(),iv3.end(),display<int>());
- cout<<endl;
-
-
- return 0;
- }
八,复杂算法示例(解释在源码中)
- #include <iostream>
- #include <vector>
- #include <functional>
- #include <algorithm>
-
- using namespace std;
-
- struct even
- {
- bool operator()(int x)const
- {
- return x%2?false:true;
- }
-
- };
- template<class T>
- struct display
- {
- void operator()(T &x)const
- {
- cout<<x<<" ";
- }
-
- };
-
- int main()
- {
- int ia[] = {12,17,20,22,23,30,33,40};
- vector<int> iv(ia,ia+sizeof(ia)/sizeof(int));
-
-
- cout<<*lower_bound(iv.begin(),iv.end(),21)<<endl;
- cout<<*upper_bound(iv.begin(),iv.end(),21)<<endl;
-
- cout<<*lower_bound(iv.begin(),iv.end(),22)<<endl;
- cout<<*upper_bound(iv.begin(),iv.end(),22)<<endl;
-
-
- cout<<binary_search(iv.begin(),iv.end(),33)<<endl;
- cout<<binary_search(iv.begin(),iv.end(),34)<<endl;
-
-
- next_permutation(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
- prev_permutation(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- random_shuffle(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- partial_sort(iv.begin(),iv.begin()+4,iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- sort(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- sort(iv.begin(),iv.end(),greater<int>());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
- iv.push_back(22);
- iv.push_back(30);
- iv.push_back(17);
-
-
-
- stable_sort(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
- pair<vector<int>::iterator,vector<int>::iterator> pairIte;
-
- pairIte = equal_range(iv.begin(),iv.end(),22);
- cout<<*(pairIte.first)<<endl;
- cout<<*(pairIte.second)<<endl;
-
-
-
- pairIte = equal_range(iv.begin(),iv.end(),25);
- cout<<*(pairIte.first)<<endl;
- cout<<*(pairIte.second)<<endl;
-
-
- random_shuffle(iv.begin(),iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- nth_element(iv.begin(),iv.begin()+5,iv.end());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- nth_element(iv.begin(),iv.begin()+5,iv.end(),greater<int>());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- stable_sort(iv.begin(),iv.end(),even());
- for_each(iv.begin(),iv.end(),display<int>());
- cout<<endl;
-
-
- return 0;
- }