C++基础笔记9
纯数据结构体
简单介绍
基础概念
作用:将多个类型聚合成一个整体成为一个新类型
1 | struct Student{ |
访问成员变量只需要用stu.score
stu.name
使用举例eg
1 | struct Student{ |
结构体特性
1 | struct A {}; //可以定义在全局 |
结构体的初始化
1 | struct Student { |
结构体的大小
会进行内存对齐而不是单纯相加
- 以最大的类型作为宽度构建一个矩阵
- 按定义顺序依次摆放
- 每个数据只能拜访在其大小的倍数的位置
- 一行摆不下就新起一行
- 行×列就是实际大小
可能会有一定的空间浪费,但会加速计算机的访问;如果相避免可以按内存大小定义
符合结构以成员最大宽度,数组以类型为宽度
结构化绑定(C++17新增)
可以将结构体内的成员变量绑定到新的变量上
1 | auto [score, name] = stu; |
C++新增简便方式
pair
pair
: 可以把两个数据类型进行聚合
pair<int, string> a;
由于没有命名,可以使用a.first
a.second
来访问
也支持pair<int,string> a{99, "小明"};
和结构化绑定 auto &[f, s] = a;
如果用auto
定义需要使用make_pair
函数来设置初始值 —>auto b = make_pair(80, "jack");
只需要两个类型都支持大小比较pair
也支持大小比较 a <=> b;
(先比较第一个,如果相同再比较第二个)
1 | int n = 8; |
tuple
如果超过两个元素可以使用C++11提供的tuple
1 | tuple<int, int, string> a{99, 7, "jack"}; |
tie
函数
绑定成员变量到已经定义的变量上,可以根据实际使用场景决定写法
1 | int score, id; |
vector
补充
1 | vector<pair<int, string>> vec; |
对于符合类型最好用emplace_back
函数
这个函数用于在容器的末尾就地构造一个新元素,而不是先复制或移动一个已存在的对象。emplace_back
通常用于性能优化,因为它避免了额外的复制或移动操作
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Frite的个人博客!