C++ STL容器+结构体+一些常用函数(持续更新)
Posted 嗯我想想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ STL容器+结构体+一些常用函数(持续更新)相关的知识,希望对你有一定的参考价值。
常用函数
四舍五入
#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的字符串
以上是关于C++ STL容器+结构体+一些常用函数(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章