algorithm中常用的现成算法:
1.binary_search() 确定容器中是否存在某个元素
2.equal() 确定两个集合中的所有元素皆相同。
3.lower_bound() 从头到尾,查找第一个大于或者等于所列元素的值的位置
用法,参考下面的min_element();
4.upper_bound() 从头到尾,查找第一个大于所列元素的值的位置
5.make_heap( ) 创建一个堆并以序列的形式输出
6.max() 返回两个元素间的较大者
7.max_element() 返回序列中的最大值
8.min() 返回两个元素中的较小者
9.min_element() 返回序列中的最小值
int a[]={1,4,66,43,2,56,443,23,234,4};
int b= min_element(a,a+7)-a;
int c= max_element(a,a+7)-a;
如果想取值的话,直接加*
: *max_element(a,a+n)
10.mismatch() 查找两个序列中的第一个不相同的位置
11.pop_heap() 从一个堆中移除一个最大的元素
12.push_heap() 添加一个元素至堆
13.reverse() 将给定序列反转顺序,范围。
14.sort() 将序列升序排序
15.sort_heap() 将堆转变为有序序列
16.swap() 交换两个对象的值
17.unique() 移除连续的重复元素
注意连续两个字,也就是说明了要先进性排序操作
为什么呢?
因为unique函数并没有把重复的元素删掉,他只是把那些重复的元素移动
到了本序列的末尾,
返回值是不重复序列的位置指针。
所以如何显示不重复序列呢?
1.一种方法是直接将不重复序列指针 it 到 vector.end()
对此阶段进行 删除
用erase()函数
erase(it,vector.end());
2.直接将vector.begin 到不重复序列尾的 位置指针 it 将元素输出来
即,
vector<int>::iterator it=a.begin();
while(it!= unique(a.begin(),a.end()))
{
cout<<*it<<" ";
it++;
}
VECTOR_STRING::iterator iNameTor;
iNameTor = unique(vecNames.begin(), vecNames.end());
cout << "after unique(), contents are:" << endl;
printVec(vecNames);
cout << "unique return a iterator, point to the first Duplicate element " << endl;
cout << iNameTor - vecNames.begin() << endl << endl;
vecNames.erase(iNameTor, vecNames.end()); //删除重复元素
cout << "after erase(), contents are:" << endl;