重构排序
//需要使用static, 内部传参使用引用
static bool cmp(int &x, int &y){
return a > b;
}
sort(a, a + n, cmp); //调用
结构体排序
struct Grade{ //结构体排序
int sum, x, y; //分别以sum、x、y作为第一、第二、第三关键字进行从大到小、从大到小、从小到大排序
bool operator< (const Grade &W) const{
if(sum != W.sum) return sum > W.sum;
if(x != W.x) return x > W.y;
return y < W.y;
}
}grade[N];
sort(grade, grade + n);
C++ string.substr()函数的用法
string s; //定义
s.substr(pos, n)
//返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos )
C++ string.find()函数的用法
string s; //定义主串
string p = "@yxc"; //定义模式串
// find()返回值是字母在母串中的下标(数值),如果没有找到,那么会返回一个标记npos
if(s.find(p) != s.npos) return true; //若找到,则返回true
string s = "123aca456";
s.find('a') = 3;
上取整
a/b上取整等于(a+b-1)/b
二分查找函数
/*
lower_bound(val): 返回容器中第一个大于或等于val的元素的iterator位置。
upper_bound(val): 返回容器中第一个大于val的元素的iterator位置。
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> t;
t.push_back(1);
t.push_back(2);
t.push_back(3);
t.push_back(4);
t.push_back(6);
t.push_back(7);
t.push_back(8);
int low=lower_bound(t.begin(),t.end(),4)-t.begin();
int upp=upper_bound(t.begin(),t.end(),4)-t.begin();
cout<<t[low]<<endl;
cout<<t[upp]<<endl;
return 0;
}
数字转换成字符串
int n = 2345678;
string str = to_string(n);
set、map汇总
// 基于平衡树实现,O(logn)
// 有序
set<int> a; //不能有重复元素
map<int, int> b;
multiset<int> c; //可以有重复元素
multimap<int> d;
// 基于哈希表实现,O(1)
// 无序
unordered_set<int> a; //不能有重复元素
unordered_map<int, int> b;
unordered_multiset<int> c; //可以有重复元素
unordered_multimap<int, int> d;
大写字母与小写字母转换函数
#include<cstring>
tmp += tolower(s[i]); //大写字母转小写字母
tmp += toupper(s[i]); //小写字母转大写字母
格式化读入
char format_time[20];
int hour = 9, minute = 35;
sprintf(format_time, "%02d:%02d", hour, minute); // 格式化读入(字符串指针,格式,参数)
string类型的printf输出方法
string name = "jack";
printf("%s", name.c_str());
文件读写1
#include<iostream>
#include<fstream>
using namespace std;
void write_file(){ //创建一个写文件流,将内容写入其中
ofstream file1;
//file1.open("test.txt", ios::app); // 从文件末尾开始写
file1.open("test.txt", ios::out); // 只写
if(file1.is_open()){
file1 << "hello world!" << endl;
}
file1.close();
}
void read_file(){ //创建一个读文件流,将内容读出
ifstream file2;
file2.open("test.txt", ios::in); // 只读
if(file2.is_open()){
string str;
getline(file2, str);
cout<<"the file has been read is : "<<str<<endl;
}
file2.close();
}
int main(){
write_file();
read_file();
return 0;
}
文件读写2
#include<iostream>
#include<string>
using namespace std;
int a, b;
string str1, str2;
int main(){
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
cin>>a>>b>>str1>>str2;
cout<<a+b<<endl;
cout<<str1+str2<<endl;
return 0;
}
逆序一个vector数组
vector<int> s = {1, 2, 3, 4, 5};
vector<int> t = vector<int>(s.rbegin(), s.rend()); // 将s数组的逆序赋给t数组
// 输出t数组为:5 4 3 2 1
感谢分享!!!
s.find(p) != npos
应该是s.find(p) != string::npos
🆗