一些基础函数

目录

链表

栈和队列

stack——

queue——

deque——

数组

list

set

map

字符串

int等

ELSE


链表

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();

数组

注意:

  1. 二维数组的size不是其中一维数组的数量而是整个大小。
  2. vector初始化的时候规定了大小的话,之后就不能使用push_back来添加元素,只能使用下标来添加。
vector<int> vec(数组长度,初始化的值);
vector<vector<int>> dp(长度,vector<int>(一维数组长度,0)); // 创建二维数组

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

// 创建二维数组
int nums[3][3]={0}; // 创建3*3大小的数组,并且全部初始化为0

list

list<vector<int>> que;
std::list<vector<int>>::iterator it=que.begin();
while(position--){
    it++;
}
que.insert(it,元素);

set

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

unordered_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()){ //找不到num
          result_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++)

// 得到map里面某键的个数
int count = map.count(键);

字符串

string str=s.substr(起始下标,长度); //分割字符串
reverse(起始下标,结束下标); //反转字符串
s.insert(开始插入的下标位置,插入的字符串); // 字符串中插入
s.erase(删除的起始下标,删除的长度); // 字符串中删除
s.compare(ss);
s.replace(起始下标,长度,要替换为的字符串);
s.find(字符串, 起始下标); //在字符串的某点开始往后找,找到对应字符串之后返回对应段的起始下标
string(n,'.'); //建立一个n个点的字符串

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

// char 转 string——
string s(1, 字符);


// getline的用法——得到有空格的字符串
cin>>n>>ch; // 如果getline之前有cin,会有一个换行符没有输入进去
getchar(); // 需要用getchar来吸取换行符,否则使用getline得到的就是回车了
getline(cin,s);

// 分割字符串,没有现成的,只能自己写:
vector<string> Split(string ss,char sign){
	vector<string> res;
	int size=ss.size();
	string tmp="";
	for(int i=0;i<size;i++){
		if(ss[i]!=sign) tmp+=ss[i];
		else if(tmp!=""){
			res.push_back(tmp);
			tmp="";
		}
	}
	if(tmp!="") res.push_back(tmp);
	return res;
}

int等

// int最大值、最小值
INT_MAX INT_MIN 

// long long 最值
LLONG_MAX LLONG_MIN

ELSE

左移运算符(<<)——a = a<< 2 ,相当于该数乘以2。

右移运算符(>>)——a=a>>2 ,相当于该数除以2。

// 设置保留小数
cout<<fixed<<setprecision(2)<<num<<endl; // 保留两位小数

isalpha(字符); // 判断是否是字母
isdigit(字符); // 判断是否是数字

tolower(字符); // 字母转小写
toupper(字符); // 字母转大写

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值