C++ STL容器+结构体+一些常用函数(持续更新)
vector翻转reverse(v.begin(), v.end());遍历vector<Student> student;for (auto &x:student) {// 带上引用可以避免重复复制,降低时间成本消耗}unordered_map查找效率 O(1),涉及到查找操作,都可以使用hash表进行处理,会降低时间成本消耗新建 / 插入一个 key-valuestring
·
常用函数
四舍五入
#include <cmath>
int res = round(2 / 3.0);
结构体
初始化构造函数
如果要重载构造函数的话,需要手动写一下默认的构造函数,否则会报错
struct Student {
string id;
int total, cnt;
int grade[6];
// 如果要写初始化函数 必须写无餐构造函数
Student() {}
// 根据 id 初始化学生
Student(string u_id) {
id = u_id;
total = cnt = 0;
for (int i = 1; i <= k; i++)
grade[i] = -2;
}
};
重载比较符号
struct Student {
string id;
int total, cnt;
int grade[6];
// 排序规则
bool operator<(const Student &t) const {
if (total != t.total) return total > t.total;
if (cnt != t.cnt) return cnt > t.cnt;
return id < t.id;
}
};
自定义函数(调用方法类似于Java)
struct Student {
string id;
int total, cnt;
int grade[6];
// 计算 cnt 和 total
void cal() {
for (int i = 1; i <= k; i++) {
if (grade[i] == p_score[i])
cnt++;
total += max(0, grade[i]);
}
}
// 判断是否属于输出条件
bool has_submit() {
for (int i = 1; i <= k; i++)
if (grade[i] >= 0) return true;
return false;
}
};
调用时:
unordered_map<string, Student> student;
vector<Student> res;
for (auto &x:student)
if (x.second.has_submit()) { // 调用
x.second.cal(); // 调用
res.push_back(x.second);
}
STL容器
vector
翻转
reverse(v.begin(), v.end());
遍历
vector<Student> student;
for (auto &x:student) { // 带上引用可以避免重复复制,降低时间成本消耗
}
for(int i = 0; i < student.size(); i++) { // 根据下标遍历
cout << student[i].name << endl;
}
unordered_map
查找效率 O(1),涉及到查找操作,都可以使用hash表进行处理,会降低时间成本消耗
新建 / 插入一个 key-value
string id;
unordered_map<string, Student> student;
student[id] = {id, name, grade};
遍历
unordered_map<string, Student> student;
for (auto &x:student) { // 带上引用可以避免重复复制,降低时间成本消耗
}
string
截取字符串
string line = "1: infomation";
string info = line.substr(3); // 表示从line[3]开始截取一直到line的末尾
string info = line.substr(3,3); // 表示从line[3]开始截取长度为3的字符串
更多推荐
已为社区贡献1条内容
所有评论(0)