链表
ListNode* p=new ListNode(0,head);
栈和队列
stack——
stack<int> st;
st.push(1);
st.push(2);
// st: 1 2
st.top(); // 2
st.size(); // 2
st.pop(); // st: 1
st.empty(); // false
queue——
queue<int> que;
que.push(1);
que.push(2);
// que: 1 2
que.front(); // =1
que.back(); // =2
que.size(); // 2
que.pop(); // que: 2
que.empty(); // false
deque——
deque<int> deq;
deq.push_back();
deq.push_front();
deq.pop_back();
deq.pop_front();
deq.front();
deq.back();
deq.size();
deq.empty();
堆
// 小顶堆
class mycomparison {public:bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) {return lhs.second > rhs.second;}
};
// 定义一个小顶堆,大小为k
priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pri_que;pri_que.push(元素);
pri_que.pop();
pri_que.top();
pri_que.size();
数组
vector<int> vec(数组长度,初始化的值);
vec.push_back(元素);
vec.pop_back();
vec.insert(插入下标,插入元素);
vec.size();
vec.clear(); // 只能清除vector里面的数据,但是内存空间没有释放
vec.begin();
vec.end();
set
//优先使用unordered_set,因为它的查询和增删效率是最优的
//如果需要集合是有序的,那么就用set
//如果要求不仅有序还要有重复数据的话,那么就用multisetunordered_set<int> result_set;
unordered_set<int> nums1_set(nums1.begin(),nums1.end());//保证nums1一定包含nums2的所有元素
//如何遍历
for(int num:nums2){if(nums1_set.find(num)!=nums1_set.end()){ //找不到numresult_set.insert(num);//插入num}
}result_set.begin();
result_set.end();
map
std::unordered_map<int,int> map;auto iter=map.find(键);
if(iter!=map.end()) return {iter->second,i}; //如果找到了某键,就返回它的值
map.insert(pair<int,int>(nums[i],i));//插入键值对// 使用迭代器扫map
for(unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++)
字符串
string str=s.substr(起始下标,结束下标); //分割字符串
reverse(起始下标,结束下标); //反转字符串
s.insert(开始插入的下标位置,插入的字符串); // 字符串中插入
s.erase(删除的起始下标,删除的长度); // 字符串中删除
s.compare(ss);
s.replace(起始下标,长度,要替换为的字符串);reverse(s.begin(),s.end());
s.push_back(char c);
s.pop_back();
s.empty();
s.back(); // 返回尾部元素
s.front(); // 返回头部元素//数值转string——
to_string(num);
//string转数值——
#include <srting>
stoi(str); // 转int
stol(str); // 转long
stoll(str); // 转longlong