C++ - 刷题 - Tips
代码篇
- 能用stl就尽量用stl,调试的时候更加方便,常用的stl包括map, set, vector, stack, queue, priority_queue,其他的例如list一般不常用
- 注意if…if…if…else的陷阱,不要为了图好看而使用if…if…if…else,血的教训
- 常用于打表的stl;array, map
map<char, int> pri = {
{'+', 1},
{'-', 1},
{'*', 2},
{'-', 2}
}
- 字符转int的正确做法是c-‘0’, 而不是int(c),切记!
// 顺便补充字符数组转int的方法
int parse_int(char s[], int l, int r) { // 将s[l-r-1]的字符串数组转为int
int res = 0;
for (int i = ; i < r; i++) res = res * 10 + s[i] - '0';
}
// 如果是字符串string,则使用stoi转
string s = "123123";
res = stoi(s);
// 字符数组转string,直接赋值即可
char ss[] = "dsadsa";
string res = ss;
// 其他常用的方法包括:stof, stoll, stod, stold, atoi等,以及从int,float到string的to_string(x)等
// 上述方法定义在<string>
- 对于链表题,和为了减少边界判定,推荐创建一个dummy节点
调试篇
- 当出现segment fault或者tle时,
用gdb/vscode定位出错原因,现已全职转换到CLion
- 当出现wrong answer时,在ac editor中进行调试,用print_xxx模拟执行过程,如下
#define pp(t, len) for (int q = 0; q < len; q++) cout << t[i] << " "; cout << endl;
pp(q, 10)