C++:一些库和函数 & 踩坑记录

tech2024-06-11  45

待解决:优先队列和双端队列

1. pair make_pair first second

2. unorder_map unorder_set

3. INT_MAX INT_MIN

4. stoi atoi 字符串转数字

5. unordered_set 和unorder_map不能存pair类型

6. if语句如果写一行,那么下面的所有语句只能只有一行,如果多行得用大括号,这样还不如写成多行

7. 定义两个类的时候,如果A类要创建B类对象,则B类的实现要放在A前面

8. 并查集的题不需要设标志位

9. C++ string substr(pos, count) pos为起始坐标,count为子串的长度

10. C++ string replace(pos, count, new_str) new_str为新的子串

11. 可以这么初始化 keyboard[2] = vector<string> {"a", "b", "c"};

12. vector<int> a(10, 1) 初始化10个1

13. map初始化可以这样初始化 map<char,string> mp={{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},  {'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}}; ​

14. string 判断是否为空可以用empty

15. string 连接或者删除尾部的char字符可以用push_back(char)和pop_back()

16. vector移除末尾元素也用pop_back()

17. queue front() 访问队首,back()访问队尾,push()加进队尾,pop()删除队首

18. stack top访问栈顶,push()向栈顶插入元素,pop()弹栈

19. 二维dp转一维dp时,一维dp的下标永远是内层循环的变量,外层永远只是用来表示循环次数的

20. C++字典遍历的两种方式

for (auto &item : stat) vec_stat.push_back({item.first, item.second});

for(iter = freq_map.begin(); iter != freq_map.end(); iter++)  freq.push_back(make_pair(iter -> first, iter -> second));

前者取出的是pair键值对,后者取出的是迭代器,是指针,所以前者用.后者用->

21. 关于erase,vector只能指定迭代器,而unordered_set和unordered_map可以指定key

22. priority_queue默认大根堆,如果要是小根堆就用priority_queue<int, vector<int>, greater<int>> minHeap;

23. priority_queue的操作和stack一样

24. 函数穿进去指针的时候,在函数内部改变指针不会真正影响到指针,但是改变指针的下一跳是会改变的,因为p -> next = (*p).next

25. C++ string转char,取第0项s[0];char转string,先定义一个额外的空串string temp = "",然后让这个空串+=遍历项,于是这个空串就变成遍历项对应的string类型

26. return一个新建的vector的时候可以直接 return vector<int> {1, 2, 3...}

27. sort函数没有返回值,并且直接调用即可, 不能arr.sort。同时,soft传入三个参数,首迭代器,尾迭代器和比较函数。

28. 优先队列在定义的时候,传入的less<int>是类型,所以不用加括号,加括号的函数是在调用构造函数的时候加。而sort不一样,sort传入的第三个参数,是函数,而不是类型,所以要加括号,即less<int>()。

29. greater<int>()是a > b的比较函数,用于sort降序和构建小根堆,less<int>()是a < b的比较函数,用于sort升序和构建大根堆

30. vector<int> ans如果要用ans[0] = 1赋初值的话,那么ans一定要定义大小,如vector<int> ans(10),不然报错

31. 在while循环的判定条件中使用i++或者++i时,i必定至少自增一次,如果把自增放在代码块中,则i有可能保持不变。总结,循环结束时,前者一定变了,后者可能没变。

32. 关于迭代器,如果是string就是 string::iterator iter; vector就是 vector::iterator::iter;

33. string的扩容用resize(新长度),原地修改,无返回值

34. 所有pop和pop_back均无返回值

最新回复(0)