用C++刷算法题的一些trick

目录

1. cctype的一些函数 

2. C++ 自定义cmp

3. C++ const定义常量

4. C++ string

5. C++ 引用&相当于改名字

6. C++ 引用struct时可以直接不写 

7. C++ STL 之动态数组vector

8. C++ STL 之集合set

9. C++ STL 之映射map

10. C++ STL 之栈stack

11. C++ STL 之队列queue

12. C++ 11函数正确打开方式

13. C++ 11中的stoi stod

 参考文献


最近打算对之前的乙级刷题做一个小总结,晚上刚好看到柳婼的一个pdf,结合着总结了一些用C++刷算法题的一些trick,用时1个小时。【侵删】

1. cctype的一些函数 

转换大小写:tolower/toupper

char c = 'A';
char b = tolower(c);

其他的:

isalpha 字母包括大小写

islower 小写字母

isupper 大写字母

isalnum 大小写字母+数字

isblank space+\t

isspace space \t \r \n

2. C++ 自定义cmp

一般配合结构体 例如:按成绩大小排序 成绩相同则按照学号大小排序

#include 
using namespace std;

struct stu{ //定义结构体
    int id;
    int score;
}
bool cmp(stu a, stu b) {
    return a.score != b.score ? a.score > b.score : return a.id < b.id;
}

3. C++ const定义常量

const int a = 10001;

4. C++ string

string s = "abc"; //直接定义
string s1 = s + s3; //拼接字符串
string s5 = to_string(12345); //将12345转换成字符串
printf("%s\n", (s + s1).c_str()); //用printf得加.c_str()

cin读入字符串以空格为间隔,整行输入需要用getline。

string s;
getline(cin, s);
cout << s.length(); //输出字符串长度

substr子字符串

string s1 = s.substr(3); //从下标3直到末尾
string s2 = s.substr(3, 5); //从3开始数5个字符

5. C++ 引用&相当于改名字

int a = 1;
int &b = a; //b即a

6. C++ 引用struct时可以直接不写 

7. C++ STL 之动态数组vector

vector, stack, queue, map, set在C++中都称作容器,www.cplusplus.com官方文档中搜关键词便会有所有方法。

vector v1; //一开始定义不分配大小
v1.resize(8); //长度改成8
vector v(10); //定义长度为10,初值都为0
vector s(10, 2); //定义长度为10,初值都为2
for(int i = 0; i < 10; i++){
    v1.push_back(i); //末尾加i
}
for(auto it = s.begin(); it != s.end(); it++)
{
    cout << *it << " "; //迭代器访问
}

 

8. C++ STL 之集合set

set自动从小到大排序

set s; //定义空集合
s.insert(1);//插入1
for(int i = 0; i < 10; i++){
   s.insert(i); //添加i
}
for(auto it = s.begin(); it != s.end(); it++)
{
    cout << *it << " "; //迭代器遍历
}
s.erase(1); //删除s中1这个元素

9. C++ STL 之映射map

map自动排序

map m; //定义一个空map 键string 值int
m["hello"] = 2; //key为hello 值为2存入map
for(auto it = m.begin(); it != m.end(); it++)
{
    cout << it->first << " " << it->second << endl; //迭代器遍历
}
cout << m.begin()->first << " " << m.begin()->second << endl; //访问第一个元素key value
cout << m.rbegin()->first << " " << m.rbegin()->second << endl; //访问最后一个元素key value

10. C++ STL 之栈stack

stack s;
for(int i = 0; i < 10; i++){
    s.push(i); //i压入栈中
}
cout << s.top() << endl; //访问栈顶元素
s.pop(); //移除栈顶元素

11. C++ STL 之队列queue

queue q;
for(int i = 0; i < 10; i++){
    q.push(i); //i压入
}
cout << q.front() << " " << q.back() << endl; //访问队顶元素 队尾元素
q.pop(); //删除队首元素

12. C++ 11函数正确打开方式

dev c++工具-编译选项-编译器-编译时加入这个命令“-std=c++11”

13. C++ 11中的stoi stod

stoi stod可以将string转换成int/double

string str = "123";
int a = stoi(str);
str = "123.4";
double b = stod(str);

不仅有上述两种,还有

stof (string to float) 

stold (string to long double)

stoll (string to long long)...etc.

 参考文献

《从放弃C语言到使用C++刷算法的简明教程v4.7》柳婼

你可能感兴趣的:(C++,PAT)