1 #define与typedef
define是直接替换
#define a(x, y) x + y
cout << a(3, 5) * a(3, 5) << endl;
#define a(x, y) (x+y)
cout << a(3, 5) * a(3, 5) << endl;
typedef:类型别名
typedef double* p;
cout << typeid(ptr).name() << endl; / p是double *类型
typedef中const是修饰p的,而非修饰p所指的对象。
const p ptr = 0; / ptr是double * const类型,是指向double的常量指针。
const p *a; / a是一个指针,所指对象是“指向double的常量指针”
2 函数返回数组指针怎么写
①使用类型别名
typedef int arrT[10]; /array是一个类型别名,表示的类型是含有10个整数的数组,arrT相当于int [10]
using arrT = int[10]; /arrT的等价声明,同第一条
arrT* func(int i); /func返回一个指向含有10个整数的数组的指针
②普通表示法
int arr[10];
int (*p)[10] = &arr; /p是指向含有10个整数的数组的指针
int (*(func (int i)) [10]; /函数func的返回类型是“指向含有10个整数的数组的指针”
Primer P205
③尾置返回类型 C++11 任何函数定义都可以使用尾置类型返回,但是这种形式对于返回类型比较复杂的函数最有效,比如返回类型是数组的指针或引用。 注意要在原位置放置auto
auto func(int i) -> int (*) [10];
④使用decltype
int odd[] = {1,3,5,7,9};
decltype(odd) *func(int i); /decltype的结果是一个长度为5的int数组,加一个*表示该函数返回值是“指向含有5个整数的数组的指针”
3 greater<>()、less<>()
对于priority_queue,更优先的元素在前端,默认情况下与less<>()相同,更大的数更优先。 但如果第三个参数为greater<>() 或者重载了()、或者重载了 < 、更小的的数更优先。
方法1:
static bool cmp(pair<int,int> a, pair<int, int> b){
return a.second > b.second;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> q(cmp);
方法2:
struct cmp1{
bool operator()(pair<int,int> a, pair<int, int> b){
return a.second > b.second;
}
};
priority_queue<pair<int,int> , vector<pair<int,int>>, cmp1> q;
priority_queue<int> q;
priority_queue<int, vector<int> ,less<int> >q;
priority_queue<int, vector<int>, greater<int> >q;
————————————————
版权声明:本文为CSDN博主「页图」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https:
#include <iostream>
#include <algorithm>
#include <functional>
#include <queue>
using namespace std;
int main() {
int a[] = { 3, 5, 6, 2, 1, 4 };
sort(a, a + 6);
cout << "sort默认:";
for (auto e : a)
cout << e << " ";
cout << endl;
sort(a, a + 6, greater<int>());
cout << "sort_greater:";
for (auto e : a)
cout << e << " ";
cout << endl;
sort(a, a + 6, less<int>());
cout << "sort_less:";
for (auto e : a)
cout << e << " ";
cout << endl;
priority_queue<int> mypriqueue;
int b[] = { 3, 5, 6, 2, 1, 4 };
for (auto e : b) {
mypriqueue.push(e);
}
cout << "优先级队列默认:";
while (!mypriqueue.empty()) {
cout << mypriqueue.top() << " ";
mypriqueue.pop();
}
cout << endl;
priority_queue<int, vector<int>, greater<int>> q1;
for (auto e : b)
q1.push(e);
cout << "优先级队列_greater:";
while (!q1.empty()) {
cout <<q1.top() << " ";
q1.pop();
}
cout << endl;
priority_queue<int, vector<int>, less<int>> q2;
for (auto e : b)
q2.push(e);
cout << "优先级队列_less:";
while (!q2.empty()) {
cout << q2.top() << " ";
q2.pop();
}
return 0;
}
输出:
sort默认:1 2 3 4 5 6
sort_greater:6 5 4 3 2 1
sort_less:1 2 3 4 5 6
优先级队列默认:6 5 4 3 2 1
优先级队列_greater:1 2 3 4 5 6
优先级队列_less:6 5 4 3 2 1
4 substr()用法
-
形式:s.substr(pos, n) -
解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s) -
补充:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
5 reverse
包含在< alogotithm > 中 reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值
6 位运算
位运算规则及常用实例 注意&运算的优先级比 << >> 低
|