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. Null Coalescing Operator

    w Parse error: syntax error, unexpected '?'

  2. cron_action

    crontab   using shell script to automate linux system maintenance tasks Linux中用crontab例行工作安排_Linux教程 ...

  3. hctf2016 fheap学习(FlappyPig队伍的解法)

    目录 漏洞原理 二次释放 如何在第二次释放前修改函数地址 fastbin的特性 修改函数指针流程 如何获得进程的加载基址 格式化字符串漏洞 确定printf函数在代码段中偏移 printf函数输出想要 ...

  4. 如何使用 stl 进行排列组合?

    #include <iostream> #include <vector> #include <algorithm> //从 indexs 集合中选择 num 个元 ...

  5. 阿里云免费SSL证书申请及配置过程centos7,Nginx

    1:进入购买,等待审核,审核通过后下在一个压缩包 ,里面包含两个文件一个 214979907780888.key 一个214979907780888.pem (如果不在阿里买,也可以在其它平台买,或者 ...

  6. C# emoji 表情如何插入mssql

    如何将emoji表情存入mssql 呢? 在Windows显示emoji(win7需要安装补丁) 在MAC完美支持 步骤就是将显示不出来的emoji UrlEncode=>进入MSsql 然后拿 ...

  7. activiti 发布异常 org.activiti.engine.ActivitiException: Error parsing XML

    三月 23, 2015 1:58:31 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() fo ...

  8. 3.1 使用STC89C52控制MC20拨打电话

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  9. Something haunts me in Python

    @1: 在查看"The Python Library Reference"(https://docs.python.org/2/library/stdtypes.html#sequ ...

  10. 在html中插入音频

    在html中插入音频 第一种:在页面代码中的<head></head>之间加入<bgsound src="音乐url" loop="-1&q ...