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. Delphi运算符及优先级

    单目运算符 (最高优先级) @ 取变量或函数的地址(返回一个指针) not 逻辑取反或按位取反 乘除及按位运算符 * 相乘或集合交集 / 浮点相除 div 整数相除 mod 取模 (整数相除的余数) ...

  2. MySQL中Btree和Hash的局限小结

    在索引中,Btree索引和Hash索引的局限性,在这里粗略罗列一下 1 Btree局限 B-树中的节点都是顺序存储的,所以可以利用索引进行查找(找某些值),也可以对查询结果进行ORDER BY(注意O ...

  3. 浅析TCP/IP

    TCP/IP概述 TCP/IP起源于1969年美国国防部(DOD:The United States Department Of Defense)高级研究项目管理局(APRA:AdvancedRese ...

  4. Python3.6全栈开发实例[021]

    21.给出一个纯数字列表. 请对列表进行排序(升级题). 思路: (1)完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10(2)循环列表. 判断a[ ...

  5. PAT 1070. 结绳(25)

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

  6. ASP.NET MVC string赋值Html格式在显示View问题总结

    ViewBag.Content = "<p>你好</p>"; string 类型的赋值一个 "<h1>你好</h1>&qu ...

  7. Java CLASSPATH

    @1:CLASSPATH用途: #1:给import指路 -- import后面的包名(转换为相应的路径后)与CLASSPATH中的各项相连接. 然后解释器从这些路径(前面连接之后的结果)中查找程序中 ...

  8. 【转】Python爬虫_示例2

    爬虫项目:爬取并筛选拉钩网职位信息自动提交简历   一 目标站点分析 #一:实验前准备: 浏览器用Chrome 用Ctrl+Shift+Delete清除浏览器缓存的Cookie 打开network准备 ...

  9. [笔记]一道C语言面试题:大整数乘法

    题目:输入两个数字字符串,如“1234567890”和“987654321”,返回二者相乘的结果字符串,如本例返回为“1219326311126352690”. 来源:某500强企业面试题目 思路:从 ...

  10. hadoop06---多线程

    .1.1. 实现线程的两种方式 1.继承Thread的方式 见代码MyThreadWithExtends 2.声明实现 Runnable 接口的方式 见代码MyThreadWithImpliment ...