vector与算法

头文件中包含大量与 vector 相关的算法,这些算法同样适用于其它容器,比如 std::list 等。

排序(Sort)

相关函数:

std::sort :普通排序

**default (1) ** * template void sort (RandomAccessIterator first, RandomAccessIterator last);*
custom (2) * template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);*

std::partial_sort:部分排序

**default (1) ** * template void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last);*
custom (2) * template <class RandomAccessIterator, class Compare> void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp);*

std::stable_sort:稳定排序

**default (1) ** template void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
custom (2) template <class RandomAccessIterator, class Compare> void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

std::partial_sort_copy:部分排序,并拷贝

**default (1) ** *template <class InputIterator, class RandomAccessIterator> RandomAccessIterator partial_sort_copy (InputIterator first,InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last); *
custom (2) *template <class InputIterator, class RandomAccessIterator, class Compare> RandomAccessIterator partial_sort_copy (InputIterator first,InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); *

普通排序

#include <algorithm>
#include <iostream>
#include <vector>
#include <ctime>
using namespace std; bool lessArray(int a, int b)
{
return a < b;
} void initArray(vector<int> &ivec,int size)
{
srand(unsigned(time(NULL)));
for (int i = 0; i < size; ++i)
{
ivec.push_back(rand() % 10);
}
} void printArray(vector<int> ivec)
{
vector<int>::iterator iter = ivec.begin();
for (; iter != ivec.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl;
} int main()
{
//普通方法
vector<int> ivec1;
initArray(ivec1, 5);
cout << "ivec1 before sort:" << endl;
printArray(ivec1);
sort(ivec1.begin(), ivec1.end());
cout <<"ivec1 after sort" <<endl;
printArray(ivec1); // 使用less<int>()
vector<int> ivec2;
initArray(ivec2, 10);
cout << "ivec2 before sort:" << endl;
printArray(ivec2);
sort(ivec2.begin(), ivec2.end(),less<int>());
cout << "ivec2 after sort" << endl;
printArray(ivec2); //使用函数对象
vector<int> ivec3;
initArray(ivec3, 10);
cout << "ivec3 before sort:" << endl;
printArray(ivec3);
sort(ivec3.begin(), ivec3.end(), lessArray);
cout << "ivec3 after sort" << endl;
printArray(ivec3); // lambda表达式
vector<int> ivec4;
initArray(ivec4, 10);
cout << "ivec4 before sort:" << endl;
printArray(ivec4);
sort(ivec4.begin(), ivec4.end(), [](int a, int b){return a < b; });
cout << "ivec4 after sort" << endl;
printArray(ivec4); //仅对选定范围类的数据进行部分排序
vector<int> ivec5;
initArray(ivec5, 10);
cout << "ivec5 before sort:" << endl;
printArray(ivec5);
partial_sort(ivec5.begin(), ivec5.begin()+7, ivec5.end());
cout << "ivec5 after sort" << endl;
printArray(ivec5); //稳定排序
vector<int> ivec6(5,6);//初始化5个数值为6的数组
srand(unsigned(time(NULL)));
for (int i = 0; i < 6; ++i)
{
ivec6.push_back(rand()%10);
}
cout << "ivec6 before sort:" << endl;
printArray(ivec6);
stable_sort(ivec6.begin(), ivec6.end(), less<int>());
cout << "ivec6 after sort" << endl;
printArray(ivec6); //部分排序并拷贝
int myints[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
vector<int> ivec7(5);
partial_sort_copy(myints, myints + 9, ivec7.begin(), ivec7.end());
cout << "ivec7 after sort" << endl;
printArray(ivec7); system("pause");
return 0;
}

输出:

ivec1 before sort:
2 8 1 9 9
ivec1 after sort
1 2 8 9 9
ivec2 before sort:
2 8 1 9 9 1 8 1 3 4
ivec2 after sort
1 1 1 2 3 4 8 8 9 9
ivec3 before sort:
2 8 1 9 9 1 8 1 3 4
ivec3 after sort
1 1 1 2 3 4 8 8 9 9
ivec4 before sort:
2 8 1 9 9 1 8 1 3 4
ivec4 after sort
1 1 1 2 3 4 8 8 9 9
ivec5 before sort:
2 8 1 9 9 1 8 1 3 4
ivec5 after sort
1 1 1 2 3 4 8 9 9 8
ivec6 before sort:
6 6 6 6 6 2 8 1 9 9 1
ivec6 after sort
1 1 2 6 6 6 6 6 8 9 9
ivec7 after sort
1 2 3 4 5
请按任意键继续. . .

[STL]vector与排序算法的更多相关文章

  1. STL vector+sort排序和multiset/multimap排序比较

    由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...

  2. STL中的排序算法

    本文转自:STL中的排序算法 1. 所有STL sort算法函数的名字列表: 函数名    功能描述 sort   对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 ...

  3. STL中sort排序算法第三个参数_Compare的实现本质

    关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重 ...

  4. STL学习笔记--排序算法

    排序算法 C++ STL 的排序算法(Sorting algorithms)是一组将无序序列排列成有序序列的模板函数或与排序相关的模板函数,提供了排序.折半搜索.归并.集合操作.堆操作.最值求解.字典 ...

  5. 对vector等STL标准容器的排序操作

    [+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...

  6. STL源代码分析——STL算法sort排序算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...

  7. 对vector等STL标准容器进行排序操作(转!)

    西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已 ...

  8. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  9. STL源码剖析(算法)

    STL中算法是基于迭代器来实现的. 有了容器中迭代器的实现(对operator*.operator++等的重载),STL中大部分算法实现就显得很简单了. 先看一例关于find算法的实现: templa ...

随机推荐

  1. 超出字数部分省略(主要解决不兼容;display: -webkit-box;的浏览器)

    注明:内容于http://www.cnblogs.com/chentongtong/p/5474553.html进一步整理. 1.现webkit内核的浏览器支持display: -webkit-box ...

  2. MySQL复制(二):二进制日志、二进制日志的结构和内容

    通常只有即将执行完毕的语句才会写入到二进制日志中.但是一些特殊情况:语句附加的信息或直接代替语句被写入. 二进制日志记录的内容 作用:记录数据库中表的更变,用于复制和PITP(即时恢复) 基于语句SB ...

  3. LINUX 文件/组/帮助/权限/文件压缩/管道

    Linux文件/目录详解 常用文件路径的作用 /var/log/messages 系统类的日志文件 /var/log/secure 登录日志文件 /var/spool/cron 定时任务目录 /etc ...

  4. mysql执行计划图

  5. 命令行查看mysql的安装目录

    方法: 进入mysql命令行输入:show variables like "%char%"; 结果如下: 红色框框就是安装目录

  6. 极速Node.js:来自LinkedIn的10个性能提升秘籍

    from:http://faylai.iteye.com/blog/1293194 1.避免使用同步的方法 nodejs 是基于单线程.为了让单线程能够处理高并发的请求,我们尽量要避免让线程等待,阻塞 ...

  7. 每天一个Linux命令(55)systemctl命令

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起.     (1)用法:     用法:  systemctl  [参数]  [服务 ...

  8. $MySQL常用操作命令备忘

    1.登录数据库:mysql -uroot -p12345  (12345为密码)2.创建数据库:create database senguocc; (senguocc为数据库名)3.查看有哪些数据库: ...

  9. Linux Shell编程 cut、print命令

    cut命令:查找符合条件的列 cut  命令是在文件中提取符合条件的列,虽然 cut 命令用于提取符合条件的列,但是也要一行一行地进行数据提取.也就是说,先要读取文本的第一行数据,在此行中判断是否有符 ...

  10. 建议44:理解模块pickle优劣

    # -*- coding:utf-8 -*- ''' pickle 估计是最通用的序列化模块了,它还有个C 语言的实现cPickle,相比pickle 来说 具有较好的性能,其速度大概是pickle ...