for循环的新型遍历
c++遍历容器一般是这样的123std::vector<std::string> name = {"ljy", "wy", "wz", "dqy"};for (auto i = name.begin(); i != name.end(); i++) // 这里auto替换了std::vector<std::string>::iterator std::cout << *i << std::endl;
在c++11中我们可以简化成这样123std::vector<std::string> name = {"ljy", "wy", "wz", "dqy"};for (auto i : name) // 注意,这里auto替换的是std::string,即直接将容器中的每个元素赋给了i进行遍历 std::cout <& ...
auto用法
前言auto会根据赋给变量的初值自动填充变量类型,当变量类型很长的时候尤其好用
注意(1)使用auto必须要赋初值,且初值不能是模板或函数等不确定类型,因为需要根据初值判断变量类型
(2)使用auto同时定义几个变量要求这几个变量的初值类型相同
1auto a = 3, b = '3', c = "3"; // 这样不行,初值类型不同只能分开写
示例123std::vector<std::string> name = {"ljy", "wy", "wz", "dqy"};for (auto i = name.begin(); i != name.end(); i++) // 这里auto替换了std::vector<std::string>::iterator std::cout << *i << std::endl;
上述循环根据c++11标准也可以这样写123std::vector<s ...
为什么推荐用++i
前言1for (int i = 0; i < 10; ++i)
以前看别人这么写都不太在意,今天偶然瞥到有说++i比i++效率更高
运算符重载于是我去找了一下两种运算重载方法:
(1)i++1234567//后置++运算符重载 Num& operator ++(int n) // int n是为了与重载前置++区分开 { Num temp = *this; this->num++; return temp; }
(2) ++i123456//前置++运算符重载 test& operator ++() { this->num++; return *this; }
对比可以发现,++i比i++省略了一步储存原变量的过程
c++ sort函数
今天get到了一点sort自定义排序函数的用法
sort函数的优势STL中的sort()并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序,是一个非常灵活方便的函数~
sort函数的使用(1)头文件:1#include <algorithm>
(2)参数:sort函数一共有三个参数:sort(begin, end, cmp)
begin为指向待排序的结构的第一个元素的指针
end为指向待排序的结构的最后一个元素的下一个位置的指针
cmp参数为排序准则,cmp参数可以不写,如果不写的话,默认从小到大进行排序
(3)自定义排序准则 对类排序:
1234567891011121314class Pair{public: string name; // 学生姓名 ...
数字排序
【问题描述】
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
【输入形式】
输入的第一行包含一个整数n,表示给定数字的个数。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
【输出形式】
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
【样例输入】
12 5 2 3 3 1 3 4 2 5 2 3 5
【样例输出】
3 4 2 3 5 3 1 1 4 1
【评分标准】
评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
思路:(1)将每个数字与其出现频率绑定定义为Pair类,定义Pair类数组;(2)接收输入,判断输入数字是否存在,存在则对应数字频率加一,不存在则写入数字并频率加一;(3)sort函数自定义排序12345678910111213141516171819202122232425262728293031323334353637383940 ...