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容器+结构体+一些常用函数(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

STL容器用法详解及注解(持续更新)

记一些stl的用法(持续更新)

C++容器Vector问题

acm学习总结

c++ STL map 结构体

开心档之C++ STL 教程