基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织

在C++中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系:

cpp 复制代码
struct Address {
    string city;
    string street;
    int zipCode;
};

struct Employee {
    string name;
    int id;
    Address address;  // 嵌套结构体
};

通过嵌套,可以清晰地表达数据之间的逻辑关联,适合处理如学生信息(包含成绩、联系方式等子结构)或游戏实体(包含位置、属性等子结构)的场景。


结构体与函数结合

结构体可以与函数结合,实现数据与操作的封装。例如为结构体定义成员函数:

cpp 复制代码
struct Rectangle {
    double width;
    double height;
    
    double area() { return width * height; }  // 成员函数
};

这种方式增强了结构体的功能性,使其接近类的特性。注意:在C++中,结构体默认成员为public,而类为private


结构体与指针的动态操作

结构体指针常用于动态内存分配和链表等数据结构:

cpp 复制代码
struct Node {
    int data;
    Node* next;  // 指向自身类型的指针
};

// 动态创建结构体实例
Node* head = new Node{10, nullptr};

通过指针可以实现链式结构(如链表、树),需注意内存管理,避免泄漏(建议搭配智能指针使用)。


结构体对齐与内存优化

结构体的内存布局受对齐规则影响,可通过#pragma packalignas手动控制:

cpp 复制代码
#pragma pack(push, 1)  // 1字节对齐
struct PackedData {
    char a;
    int b;
};
#pragma pack(pop)      // 恢复默认对齐

优化对齐减少内存浪费,尤其在网络传输或硬件交互时需考虑平台兼容性。


结构体与STL容器结合

结构体可作为STL容器的元素,例如vectormap

cpp 复制代码
struct Student {
    string name;
    int score;
};

vector<Student> students = {{"Alice", 90}, {"Bob", 85}};
sort(students.begin(), students.end(), 
    [](const Student& a, const Student& b) { return a.score > b.score; });

通过自定义排序或哈希函数(用于unordered_map),结构体在STL中能高效处理复杂数据集合。


结构体的高级初始化技巧

C++11后支持成员初始化列表和聚合初始化:

cpp 复制代码
struct Point {
    int x = 0;  // 默认值
    int y = 0;
};

Point p1{1, 2};       // 聚合初始化
Point p2 = {.x = 3};  // C++20指定成员初始化

此特性简化了初始化代码,尤其适用于可选字段较多的场景(如配置参数)。


结构体与元编程

通过模板和constexpr,结构体可用于编译时计算:

cpp 复制代码
template<typename T>
struct TypeSize {
    static constexpr size_t value = sizeof(T);
};

constexpr size_t intSize = TypeSize<int>::value;  // 编译时获取大小

结合模板元编程,结构体能实现类型萃取等高级功能,增强代码泛用性。

相关推荐
程与留11 小时前
15_国际化和本地化:tr()、ts 文件、QM 文件、多语言切换
c++·qt
地平线开发者12 小时前
【模型轻量化专题】衡量模型轻量性的指标
算法
程与留13 小时前
14_Qt 样式表(QSS)入门(语法、选择器、美化实战)
c++·qt
学习星球15 小时前
OFDM技术精讲:正交性推导、循环前缀原理与80行Python链路仿真(附实测数据)
算法·面试·前端框架
欧特克_Glodon21 小时前
OpenCV计算机视觉开发入门与实践<二十七>:图像分割概述
c++·人工智能·opencv·计算机视觉
蒸蒸yyyyzwd21 小时前
cpp 选手秋招学习笔记 day21
c++·面试·八股
alphaTao21 小时前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
Interview Aid1121 天前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
CoderIsArt1 天前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
顶点多余1 天前
那些在算法中适合巩固的知识点---1
java·前端·算法