代码面试C++/STL Cheat Sheet
在以前的面试指南中,写代码不限定编程语言,主要考察算法。近几年机器学习火了之后,作为面试官,面试科班出身的面试者我会要求对方使用C或C++而非Python。原因很简单,现在许多科班出身的同学基本功不扎实,恨不能大一上来就搞深度学习,对计算机科学没有大局观和底层的认识,往往不能很好地胜任日常的工作。而C/C++作为科班的必修课,可以作为一个简单的分类器判断对方的功底。
吐槽完毕,LeetCode是大家常用来刷题的网站,但对于工作中不把C/C++作为开发语言的工程师来说有些语法太久不用就忘了,更不提STL中的一些特殊数据结构的方法,这里简单总结一下,便于快速捡起来。
#include <iostream>
#include <climits>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <stack>
#include <queue>
#include <deque>
using namespace std;
int main()
{
// Constants
cout<<"INT_MAX: "<<INT_MAX<<endl;
cout<<"INT_MIN: "<<INT_MIN<<endl;
// Vector
vector<int> v(3, 0); // Init a 1 * 3 vector with value 0
v.push_back(0);
v.pop_back();
cout<<"Final vector size: "<<v.size()<<endl;
vector<vector<int>> v2d(3, vector<int>(5, 0)); // Init a 3 * 5 2d vector with value 0
cout<<"2d vector size: "<<v2d.size()<<" * "<<v2d[0].size()<<endl;
// Map & unordered_map
unordered_map<int, int> m;
m[0] = 1;
m.erase(0);
cout<<"Final map size: "<<m.size()<<endl;
// Set & unordered_set
unordered_set<int> s;
s.insert(0);
s.erase(0);
cout<<"Final set size: "<<s.size()<<endl;
// Stack
stack<int> stk;
stk.push(0);
int stackTop = stk.top();
stk.pop();
cout<<"Final stack size: "<<stk.size()<<endl;
// Queue
queue<int> q;
q.push(0);
int qFront = q.front();
q.pop();
cout<<"Final queue size: "<<q.size()<<endl;
// Deque
deque<int> deq;
deq.push_front(0);
deq.push_back(1);
int deqFront = deq.front();
int deqBack = deq.back();
cout<<"Deque: "<<deqFront<<" "<<deqBack<<endl;
deq.pop_front();
deq.pop_back();
cout<<"Final deque size: "<<deq.size()<<endl;
// Priority Queue
priority_queue<int> pq; // max heap
pq.push(0); pq.push(1);
int pqTop = pq.top();
cout<<"Priority queue top: "<<pqTop<<endl;
pq.pop();
cout<<"Final priority queue size: "<<pq.size()<<endl;
}
运行结果:
INT_MAX: 2147483647
INT_MIN: -2147483648
Final vector size: 3
2d vector size: 3 * 5
Final map size: 0
Final set size: 0
Final stack size: 0
Final queue size: 0
Deque: 0 1
Final deque size: 0
Priority queue top: 1
Final priority queue size: 1