一、sort:对一定范围内的所有元素排序
原型:
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
例子代码:
// sort algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool myfunction (int i,int j) { return (i<j); }
struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;
int main () {
int myints[] = {32,71,12,45,26,80,53,33};
vector<int> myvector (myints, myints+8);// 32 71 12 45 26 80 53 33
vector<int>::iterator it;
// using default comparison (operator <):
sort (myvector.begin(), myvector.begin()+4);//(12 32 45 71)26 80 53 33
// using function as comp
sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
// using object as comp
sort (myvector.begin(), myvector.end(), myobject);//(12 26 32 33 45 53 71 80)
// print out content:
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
二、stable_sort:归并排序
原型:
template <class RandomAccessIterator>
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );
例子代码:
// stable_sort example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool compare_as_ints (double i,double j)
{
return (int(i)<int(j));
}
int main () {
double mydoubles[] = {3.14, 1.41, 2.72, 4.67, 1.73, 1.32, 1.62, 2.58};
vector<double> myvector;
vector<double>::iterator it;
myvector.assign(mydoubles,mydoubles+8);
cout << "using default comparison:";
stable_sort (myvector.begin(), myvector.end());
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;
myvector.assign(mydoubles,mydoubles+8);
cout << "\nusing 'compare_as_ints' :";
stable_sort (myvector.begin(), myvector.end(), compare_as_ints);
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
三、partial_sort_copy:对序列中的某个范围的元素进行排序(部分排序)
原型:
template <class InputIterator, class RandomAccessIterator>
RandomAccessIterator
partial_sort_copy ( InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last );
template <class InputIterator, class RandomAccessIterator, class Compare>
RandomAccessIterator
partial_sort_copy ( InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last, Compare comp );
示例代码:
// partial_sort example
#include <iostream>
#include <algorithm>
#include <vector>
usingnamespacestd;
boolmyfunction (inti,intj) {return(i<j); }
intmain () {
intmyints[] = {9,8,7,6,5,4,3,2,1};
vector<int> myvector (myints, myints+9);
vector<int>::iterator it;
// using default comparison (operator <):
partial_sort (myvector.begin(), myvector.begin()+5, myvector.end());
// using function as comp
partial_sort (myvector.begin(), myvector.begin()+5, myvector.end(),myfunction);
// print out content:
cout <<"myvector contains:";
for(it=myvector.begin(); it!=myvector.end(); ++it)
cout <<" "<< *it;
cout << endl;
return0;
}
四、partial_sort_copy:部分排序后拷贝
原型:
template <class InputIterator, class RandomAccessIterator>
RandomAccessIterator
partial_sort_copy ( InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last );
template <class InputIterator, class RandomAccessIterator, class Compare>
RandomAccessIterator
partial_sort_copy ( InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last, Compare comp );
示例:
// partial_sort_copy example#include <iostream>#include <algorithm>#include <vector>using namespace std;bool myfunction (int i,int j) { return (i<j); }int main () { int myints[] = {9,8,7,6,5,4,3,2,1}; vector<int> myvector (5); vector<int>::iterator it; // using default comparison (operator <): partial_sort_copy (myints, myints+9, myvector.begin(), myvector.end()); // using function as comp partial_sort_copy (myints, myints+9, myvector.begin(), myvector.end(), myfunction); // print out content: cout << "myvector contains:"; for (it=myvector.begin(); it!=myvector.end(); ++it) cout << " " << *it; cout << endl; return 0;}
五、nth_element:使第n个元素处在序列中的第n个位置,并在这个元素前都是比这个元素小的,
这个元素后面都是比这个这元素大,但是这前后两个序列并不一定都是有序的(排过序);
原型: template <class RandomAccessIterator>
void nth_element ( RandomAccessIterator first, RandomAccessIterator nth,
RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void nth_element ( RandomAccessIterator first, RandomAccessIterator nth,
RandomAccessIterator last, Compare comp );
例子代码:
// nth_element example#include <iostream>#include <algorithm>#include <vector>using namespace std;bool myfunction (int i,int j) { return (i<j); }int main () { vector<int> myvector; vector<int>::iterator it; // set some values: for (int i=1; i<10; i++) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9 random_shuffle (myvector.begin(), myvector.end()); // using default comparison (operator <): nth_element (myvector.begin(), myvector.begin()+5, myvector.end()); // using function as comp nth_element (myvector.begin(), myvector.begin()+5, myvector.end(),myfunction); // print out content: cout << "myvector contains:"; for (it=myvector.begin(); it!=myvector.end(); ++it) cout << " " << *it; cout << endl; return 0;}
分享到:
相关推荐
算法:用来处理群集内的元素。它们可以出于不同的目的而搜寻,排序,修改,使用那些元素。... 3)排序值算法:包涵对容器中的值进行排序和合并的算法,还有二叉搜索算法 ,4)通用数值算法:此种算法不多,涉及到专业
STL的常用算法 常用遍历算法、常用查找算法、常用排序算法、常用拷贝和替换算法、常用算术生成算法、常用集合算法
每日提交 :two_o’clock: :...存储库包含各种数据结构的代码以及入职前课程资料,包括以下主题:数组,位操作,递归,棘手的问题陈述,数学编码问题,链接列表,堆栈,队列,图,树,STL,搜索算法,排序算法等。
STL 分治 动态规划 区间DP 哈希表 图论 最小生成树 最短路 奇思妙想 字符串 字符串匹配 常用技巧 并查集 排序 顺序统计量 搜索 BFS 二分搜索 回溯 数据结构 二叉树 树状数组 树(广义的) 数论 组合数学 计算几何 ...
STL算法部分主要由头文件和组成。 (3)迭代器(Iterators)。迭代器是面向对象版本的指针,如同指针可以指向内存中的一个地址,迭代器可以指向容器中的一个位置。 STL的每一个容器类模板中,都定义了一组对应...
6.1.5 STL算法的一般形式 292 6.2 算法的泛化过程 294 6.3 数值算法 [stl_numeric.h] 298 6.3.1 运用实例 298 6.3.2 accumulate 299 6.3.3 adjacent_difference 300 6.3.4 inner_product 301 6.3.5 partial_...
7:算法(algorithms)部分。STL重要部分,包含了70多个通用算法,都是优化的效率很高的,用来控制各种容器,内建数组等。例如find可以用来在容器中查找某特定值的元素,for_each可以用来将函数应用到容器元素之上,...
看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;甚至还能够看到底层的memory pool和高阶抽象的traits机制的实现。 第1 章 STL 概论与著作版本简介 第2 章 空间配置器(allocator) 第3 章 迭代器...
Data Structures, Algorithms, and Applications in C++, Second Edition 出版者的话 译者序 前言 第一部分 预备知识 第1章 C++回顾 1.1 引言 1.2 函数与参数 1.2.1 传值参数 1.2.2 模板函数 1.2.3 引用参数 ...
看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;甚至还能够看到底层的memory pool和高阶抽象的traits机制的实现。 目录: 疱丁解牛(侯捷自序) 目录 前言 第1章 STL概论与版本简介 第2章 空间...
数据结构和算法(C ++) 免责声明 知道一种编程语言和DSA是两回事。 例如。 您可能知道python,c,c ++,java等,但是如果您知道DSA,则可以在任何编程...排序算法 二进制搜索 向量 位操作 数论 递归 回溯 时空复杂性
第3 章STL 技术原理· · · · · · · · · · · · · · · · · ·................................. 103 3-1 模板概述· · · · · · • · · · · · · · · · · · · ·.......................
所有排序算法 数据结构 串 数组/向量 矩阵 堆栈,队列和优先级队列 链表 二叉树 堆 设置和哈希图 图形 特里 高级数据结构(段树,B +树等) 标准模板库(STL-仅在C ++中可用) 算法技术 按位算法 动态编程 ...