STL之使用vector排序
2015-07-08 18:53
537 查看
应用场景:
在内存中维持一个有序的vector:
root@u18:~/cp/test# valgrind --tool=memcheck --leak-check=yes ./a.out
==24247== Memcheck, a memory error detector
==24247== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==24247== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==24247== Command: ./a.out
==24247==
Before Sort:
0 sh
1 shsh
2 shshsh
3 shshshsh
4 shshshshsh
5 shshshshshsh
6 shshshshshshsh
7 shshshshshshshsh
8 shshshshshshshshsh
9 shshshshshshshshshsh
对向量中的所有元素按member1进行升序排列:
9 shshshshshshshshshsh
8 shshshshshshshshsh
7 shshshshshshshsh
6 shshshshshshsh
5 shshshshshsh
4 shshshshsh
3 shshshsh
2 shshsh
1 shsh
0 sh
==24247==
==24247== HEAP SUMMARY:
==24247== in use at exit: 0 bytes in 0 blocks
==24247== total heap usage: 25 allocs, 25 frees, 768 bytes allocated
==24247==
==24247== All heap blocks were freed -- no leaks are possible
==24247==
==24247== For counts of detected and suppressed errors, rerun with: -v
==24247== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
在内存中维持一个有序的vector:
// VectorSort.cpp : Defines the entry point for the console application. #include <iostream> #include <vector> #include <algorithm> //先自定义一个结构体 struct Test { float member1; std::string member2; }; bool SortByM1( const Test* v1, const Test* v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致 { return v1->member1 > v2->member1; //降序排列 //return v1->member1 > v2->member1; //升序排列 } void PrintVector( std::vector<Test*> & vec) { /* 插一句, vec.begin()对应的位置是向量的第一个位置, vec.end()对应的是vector中的最后的一个元素位置的后面的一个位置(我认为,实际上是一个无效位置) 文档上的定义:Returns an iterator referring to the past-the-end element in the vector container. */ for(std::vector<Test*>::iterator it = vec.begin() ; it != vec.end() ; it++ ) { std::cout<<(*it)->member1<<'\t'<<(*it)->member2<<std::endl; } } int main(int argc, char* argv[]) { std::vector<Test*> vecTest; std::string stt; for(int i=0; i<10;++i){ stt = "sh" + stt; Test* tmp = new Test(); tmp->member1 = i; tmp->member2 = stt; vecTest.push_back(tmp); } //排序之前 std::cout<<"Before Sort:"<<std::endl; PrintVector(vecTest); std::cout<<"对向量中的所有元素按member1进行升序排列:"<<std::endl; std::sort(vecTest.begin(),vecTest.end(), SortByM1); PrintVector(vecTest); //std::cout<<"对向量中的第2个到第5个元素按member1进行升序排列:"<<std::endl; //std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5为第6个位置 //PrintVector(vecTest); for(std::vector<Test*>::iterator it = vecTest.begin(); it != vecTest.end(); ++it){ delete *it; #free掉内存 } return 0; } root@u18:~/cp/test# g++ vector_sort.cpp -g -Wall root@u18:~/cp/test# ./a.out Before Sort: 0 sh 1 shsh 2 shshsh 3 shshshsh 4 shshshshsh 5 shshshshshsh 6 shshshshshshsh 7 shshshshshshshsh 8 shshshshshshshshsh 9 shshshshshshshshshsh 对向量中的所有元素按member1进行升序排列: 9 shshshshshshshshshsh 8 shshshshshshshshsh 7 shshshshshshshsh 6 shshshshshshsh 5 shshshshshsh 4 shshshshsh 3 shshshsh 2 shshsh 1 shsh 0 sh
root@u18:~/cp/test# valgrind --tool=memcheck --leak-check=yes ./a.out
==24247== Memcheck, a memory error detector
==24247== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==24247== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==24247== Command: ./a.out
==24247==
Before Sort:
0 sh
1 shsh
2 shshsh
3 shshshsh
4 shshshshsh
5 shshshshshsh
6 shshshshshshsh
7 shshshshshshshsh
8 shshshshshshshshsh
9 shshshshshshshshshsh
对向量中的所有元素按member1进行升序排列:
9 shshshshshshshshshsh
8 shshshshshshshshsh
7 shshshshshshshsh
6 shshshshshshsh
5 shshshshshsh
4 shshshshsh
3 shshshsh
2 shshsh
1 shsh
0 sh
==24247==
==24247== HEAP SUMMARY:
==24247== in use at exit: 0 bytes in 0 blocks
==24247== total heap usage: 25 allocs, 25 frees, 768 bytes allocated
==24247==
==24247== All heap blocks were freed -- no leaks are possible
==24247==
==24247== For counts of detected and suppressed errors, rerun with: -v
==24247== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
相关文章推荐
- Xutils使用总结
- 四 错误处理篇 How to Fix Login Failed For User NT AUTHORITY IUSRS in SharePoint 2013 ...
- 《编程导论(Java)·6.3 private修饰符》
- 【PRML读书笔记-Chapter1-Introduction】1.4 The Curse of Dimensionality
- 04-DatePicker 时间选择器
- 三、零代码实战 SharePoint 2013 BCS:实干篇
- 高斯分布补充知识
- 开始拒绝
- 初学_Android4高级编程-9 SQLite数据库
- 03-Block
- LeetCode-Remove Linked List Elements-解题报道
- PAT数据结构陈越——自测04
- 初学_Android4高级编程-8 share preference&文件&状态保存
- Android第四十三期 - 为自己的App支持emjo表情
- Android第四十三期 - 为自己的App支持emjo表情
- C Abstract——Struct 结构体
- 02-单例-通知-KVO-Block-代理
- 数据结构课程设计论文--学生信息管理系统
- json
- Nginx反向代理实现负载均衡配置图解