C++中vector和list排序
容器、泛型算法、和类是不是就是C++相对于C“++”的那部分呢?暂时先这么认为吧。如果这篇博客有幸被别人看到,请帮忙指出。——C++ 菜鸟 留。
vector的迭代器是随机访问迭代器,支持泛型算法的sort及其算法。
//vector排序
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <numeric> using namespace std; //两个谓词函数
bool isShorter(const string &pre,const string &cur)
{
return (pre.size()<cur.size());
} bool GT4(const string &str)
{
return (str.size()>=4);
} int main()
{
cout<<"输入几个单词:"<<endl;
string str;
vector<string> strVec;
while (cin >> str)
{
strVec.push_back(str);
} //字典序
sort(strVec.begin(),strVec.end()); //去除重复的单词,返回一个迭代器,表示无重复的值得范围的结束
vector<string>::iterator iter_unique = unique(strVec.begin(),strVec.end()); //去除容器末尾重复的单词
strVec.erase(iter_unique,strVec.end()); sort(strVec.begin(),strVec.end(),isShorter);//按字符长短排序,相同长度的按字典序 cout<<"排序后的单词:"<<endl;
vector<string>::iterator iter = strVec.begin();
while (iter!=strVec.end())
{
cout << *iter<<"\t";
++iter;
}
cout<<endl; vector<string>::size_type cnt = count_if(strVec.begin(),strVec.end(),GT4);
cout<<cnt<<"个单词的长度大于等于4。"<<endl;
system("pause");
return 0;
}
其中unique函数返回一个迭代器,unique后需要调用erase手动删除容器尾部重复的单词。
而list容器上的迭代器是双向的,不支持随机访问,因此不能使用需要随机访问迭代器的sort算法。C++为list容器提供了特有的算法。
//list排序
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
#include <numeric> using namespace std; bool isShorter(const string &pre,const string &cur)
{
return (pre.size()<cur.size());
} bool GT4(const string &str)
{
return (str.size()>=4);
} int main()
{
cout<<"输入几个单词:"<<endl;
string str;
list<string> strList;
while (cin >> str)
{
strList.push_back(str);
}
strList.sort();//字典序
strList.unique();//去除重复的单词
strList.sort(isShorter);//按字符长短排序,相同长度的按字典序
cout<<"排序后的单词:"<<endl;
list<string>::iterator iter = strList.begin();
while (iter!=strList.end())
{
cout << *iter<<"\t";
++iter;
}
cout<<endl; list<string>::size_type cnt = count_if(strList.begin(),strList.end(),GT4);
cout<<cnt<<"个单词的长度大于等于4。"<<endl;
system("pause");
return 0;
}
在list的sort排序中,unique会自动去除重复的单词,程序员无需手动删除。
C++中vector和list排序的更多相关文章
- 标准库中 vector list等排序
1.list自带有排序函数sort():可以定义自己的排序规则,如: struct stTest { int count; wstring str; }; bool SortByNum(const s ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- STL中vector的赋值,遍历,查找,删除,自定义排序——sort,push_back,find,erase
今天学习网络编程,那个程序中利用了STL中的sort,push_back,erase,自己没有接触过,今天学习一下,写了一个简单的学习程序.编译环境是VC6.0 这个程序使用了vect ...
- 关于C++中vector和set使用sort方法进行排序
C++中vector和set都是非常方便的容器, sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序 将sort方法用到vector和set中能实现多种 ...
- 【转】vector中对象指针的排序
原文:http://blog.csdn.net/tanlijun37/article/details/1948493 vector中对象指针的排序,初步想法是1: 把对象指针存到vector,重载bo ...
- C++ 中vector的基本用法
//在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少 基本概念 vector容器是一个模板类,可以存放任何类型的对象).vector对象可以在运行时高效地添加元素,并且vector中元素是 ...
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
随机推荐
- 使用log4net写自定义日志
在使用log4net写Web服务器端日志的时候,通常需要一些自定义的参数,比如请求的url,method,以及用户名等等,而log4net中默认的Log接口只提供了很少的参数. 在网上找的其他的 ...
- 省市联动JQ封装比较简洁调用的方法
前言 因为省市联动的需求在每个项目几乎存在,所以本人也对此在web页面通过封装比较简洁的JQ方法循环判断调用调用后台获取数据再绑定到Select表单上.如果对代码有什么疑问或者更好办法可以在评论区留言 ...
- VC++ 控制台不自动退出
1.Ctrl+F5 2.结尾添加 getchar() 3.结尾添加 system("pause"); 参考:http://jingyan.baidu.com/article/555 ...
- Reading source code
software is a system built up of many parts rebuild that decomposition see the patterns in codes is ...
- js的function中的指向自身的属性
1,arguments.callee 2,方法的constructor
- php5.5新特性之yield理解
今天,在阅读别人代码时,其中出现了一个陌生的关键字yield,想一探究竟,于是找到:http://php.net/manual/zh/language.generators.overview.php ...
- python运维开发(二十一)----文件上传和验证码+session
内容目录: 文件上传 验证码+session 文件和图片的上传功能 HTML Form表单提交,实例展示 views 代码 HTML ajax提交 原生ajax提交,XMLHttpRequest方式上 ...
- CentOS6.4卸载自带的OpenJDK并安装jdk1.6.21
#进入系统的terminal,查看当前的jdk版本: shell>java -version #查看安装包 shell>rpm -qa|grep java #将上条命令查出来的结果卸载掉, ...
- windows bat脚本编写
windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...
- mysql select不使用任何锁(select with nolock)
在ms sql中可以通过with(nolock)选项指定查询不锁表,在mysql中没有这个选项,需要通过set语句来设置不锁表: SET TRANSACTION ISOLATION LEVEL REA ...