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. 报表生成之Hyperion SQR

    SQR(Structured Query Reporter)是为从数据库管理系统生成报告而设计的一种编程语言.名称是结构化查询报告的缩写,这表明它与SQL(结构化查询语言)的关系.任何SQL语句可以嵌 ...

  2. js计算两个时间之间的间隔

    计算时间间隔的方法有很多,这里只是一种方式,可以方法里直接传入两个时间,也可以传入两个字符串格式的时间,在方法里解析一下就ok,这个例子里不传入参数,直接在方法里随便写一个时间来演示一下 fun() ...

  3. Vue.js之组件传值

    Vue.js之组件传值 属性传值可以从父组件到子组件,也可以从子组件到父组件. 这里讲一下从父组件到子组件的传值 还以上次的demo为例,demo里有APP.vue是父组件,Header.vue,Us ...

  4. 基于Cpython的 GIL(Global Interpreter Lock)

    一 介绍 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native t ...

  5. nodejs中全栈开发框架meteor的文档

    http://wiki.jikexueyuan.com/project/discover-meteor/routing.html,   这本书的源码地址: https://github.com/Dis ...

  6. 常用MS-SQL写法整理

    这里整理日常会用到的一些写法,一些常规的group by,系统函数等用法不在这里做记录了,大家有什么好的写法也可以分享下 1 sql操作xml内容(sp_xml_preparedocument和ope ...

  7. Python基础(9)_生成器(yield表达式形式)、面向过程编程

    一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwa ...

  8. win10系统修改Intel VT-x时进入不了BIOS问题

    一般电脑进入BIOS的方式都是在开机的时候不停的按F2或者F12,但是Win10系统由于支持快速启动,当win10系统快速启动的时候,按F12或者F2是没反应的,解决方式: 第一步:修改win10的启 ...

  9. linux 定时任务未执行php脚本

    1,对于无法执行php文件,首先你应该考虑的问题是是否php代码有错误,你可以先检查一下你的php代码,或者可以在linux上面执行一下这个文件,看是否能够执行成功:如果成功了,就说明是crontab ...

  10. Hyperledger Fabric1.0环境搭建

    一.准备CentOS系统,本文使用的是CentOS7.0 二.安装Docker 执行命令 yum -y install docker 验证是否安装成功 docker --version 三.安装Doc ...