一些基础函数

链表

ListNode* p=new ListNode(0,head);

栈和队列

stack——

stack 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 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 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& lhs, const pair& rhs) {
            return lhs.second > rhs.second;
        }
};
// 定义一个小顶堆,大小为k
priority_queue, vector>, mycomparison> pri_que;

pri_que.push(元素);
pri_que.pop();
pri_que.top();
pri_que.size();

数组

vector vec(数组长度,初始化的值);
vec.push_back(元素);
vec.pop_back();
vec.insert(插入下标,插入元素);
vec.size();
vec.clear(); // 只能清除vector里面的数据,但是内存空间没有释放
vec.begin();
vec.end();

set

//优先使用unordered_set,因为它的查询和增删效率是最优的
//如果需要集合是有序的,那么就用set
//如果要求不仅有序还要有重复数据的话,那么就用multiset

unordered_set result_set;
unordered_set nums1_set(nums1.begin(),nums1.end());

//保证nums1一定包含nums2的所有元素
//如何遍历
for(int num:nums2){
    if(nums1_set.find(num)!=nums1_set.end()){ //找不到num
          result_set.insert(num);//插入num
     }
}

result_set.begin();
result_set.end();

map

std::unordered_map map;

auto iter=map.find(键);
if(iter!=map.end()) return {iter->second,i}; //如果找到了某键,就返回它的值
map.insert(pair(nums[i],i));//插入键值对

// 使用迭代器扫map
for(unordered_map::iterator it = map.begin(); it != map.end(); it++)

一些基础函数_第1张图片 

字符串

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 
stoi(str); // 转int
stol(str); // 转long
stoll(str); // 转longlong

你可能感兴趣的:(日常,算法)