从熟练Python到入门学习C++(record 4)

1.数组

1.1一维数组

注意:

1.数组长度和值的内容,总得确定一个;没有数组长度,得有值;没有值,得有数组长度;

2.打印数组名,只能打印数组中第一位的内存地址;

3.数组中每一位的地址差(int,4)的字节。

4.相当于常量,给数组划分好内存地址,不能改变常量。

#include <iostream>
using namespace std;

int main()
{
    int x[] = {1,2,3};
    int y[5] = {1,2,3,4};
    int z[10];

    cout << "x : " << x[0] << endl;
    cout << "y : " << y[1] << endl;
    cout << "z : " << (long long)z << endl;
    cout << "z : " << (long long)&z[1] << endl;

    cout << "sizeof y : " << sizeof(y) << endl;
    cout << "sizeof z : " << sizeof(z) << endl;

    return 0;
}

冒泡排序:

#include <iostream>
using namespace std;

int main()
{
    int arr[] = {4,26,86,0,552,7,1,32,935};
    int tmp, r;
    int n = sizeof(arr) / sizeof(arr[0]);

    for ( int i = 0; i < n; i++)
    {
        int count = n;
        for (int l = 0; l < n-1; l++)
        {
            r = l + 1;
            if (arr[l] > arr[r])
            {
                tmp = arr[l];
                arr[l] = arr[r];
                arr[r] = tmp;
                count--;
            }
        }
        if (count == n)
        {
            break;
        }
    }

    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;

}

1.2二维数组

有四种可以定义的方式;要注意最好使用第三种方式,全面的表达二维数组;

#include <iostream>
using namespace std;

void print(int matrix[][2], const int rows)
{
    cout << "*********"<<endl;
    cout << "sizeof matrix is : " << sizeof(matrix) <<endl;
    int m = rows;
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << "\n";
    }
}

int main()
{
    int matrix1[3][2];
    int matrix2[][2] = {
        {1, 2},
        {2, 4}
    };
    int matrix3[3][2] = {
        {1, 2},
        {2, 3},
        {3, 4}
    };
    int matrix4[3][2] = {1, 3, 4, 5, 7, 7};

    print(matrix1, 3);
    cout << "sizeof matrix is : " << sizeof(matrix1) <<endl;
    print(matrix2, 2);
    print(matrix3, 3);
    print(matrix4, 3);
    
    return 0;
}

这里面不像python一样,函数中存在警告,具体原因后面应该会知道;

2.函数

2.1定义

1.函数返回类型

2.函数名

3.参数表列

4.函数体语句

5.return表达式

#include <iostream>
using namespace std;

int add(int a, int b)
{
    return a + b;
}

int main()
{
    int a, b;
    cin >> a;
    cin >> b;
    cout << "a : " << a << " | b is : " << b << endl;
    int c = add(a, b);
    cout << "sum is : " << c << endl;
    return 0;
}

2.2函数的调用与值传递

与python一样:

1.实参传入,转化成函数中的形参;

2.形参改变,实参不变;因为参数传入的时候,把值赋给新的内存地址;

2.3函数的分文件编写

2.3.1对于新手来说,vscode编写比较困难;

1.首先在当前目录下创建src和include文件夹,里面分别放函数和头文件。

 2.include中的vs.h头文件相当于python的__init__.py记录函数的实例;

#include <iostream>
using namespace std;

int add(int a, int b, int c);

3.src中的vs.cpp相当于python中函数;

#include "vs.h"


int add(int a, int b, int c)
{
    return (a < b) ? b : c;
}

4.修改.vscode文件夹内两个json文件。

对于第一个json文件需要添加,相当于告诉程序,需要增加头文件夹的地址。

对于第二个json文件需要添加,把头文件和函数都加进文件夹内;

 2.3.2使用vs2022版编写,简单多了

不同的文件放进不同的文件夹中(.h放进头文件中,.cpp放进源文件中)

编写步骤可分为以下操作,学到后面应该可以简化步骤

1.在头文件中添加新的swap.h,相对于python的__init__文件

2.在源文件中添加swap.cpp函数文件,首先要和头文件进行链接,其次编写函数主体

3.在源文件中使用函数,编写hanshu.cpp文件,也要和头文件进行链接。

<think>好的,我现在需要回答用户关于C++应用领域的问题。首先,用户之前已经询问过如何用C++开发小型数据库,现在转向了解C++的应用领域,可能是在学习或工作中需要选择编程语言,或者想更深入了解C++的优势。 用户可能是刚入门的开发者,或者有一定经验但想扩展知识面的程序员。他们可能想知道C++在哪些领域被广泛使用,以便决定是否深入学习或应用该语言。此外,用户可能对C++的性能、控制硬件的能力以及跨平台特性感兴趣。 接下来,我需要整理C++的主要应用领域。C++因其高效性和灵活性,被用于多个对性能要求高的领域。首先想到的是系统级开发,如操作系统、驱动程序和嵌入式系统,因为C++可以直接操作硬件并提供底层控制。然后是游戏开发,尤其是大型游戏引擎,像Unreal Engine就是用C++编写的,因为它需要高性能和实时渲染。 再者,金融领域的高频交易系统,这类系统对延迟极其敏感,C++的高效执行和内存管理能力非常重要。科学计算和工程模拟,如MATLAB和Autodesk的软件,也依赖C++进行复杂计算。图形处理方面,图像处理软件和计算机视觉库(如OpenCV)常用C++实现。数据库系统和分布式系统,比如MySQL和MongoDB,其核心部分用C++编写以优化性能。物联网和实时系统,如自动驾驶和机器人控制,也需要C++的实时响应能力。最后,跨平台应用开发,例如使用Qt框架开发桌面应用。 在组织这些内容时,需要分点说明每个领域,并举例说明具体应用,以帮助用户理解。同时,要强调C++在这些领域中的优势,如性能、控制能力、跨平台等。最后,可能需要总结C++的适用场景,帮助用户判断是否适合他们的需求。 需要注意的是,用户可能对某些术语不太熟悉,比如“高频交易”或“实时系统”,可能需要简要解释。同时,应避免过于技术性的描述,保持回答的易懂性。确保结构清晰,每个应用领域作为独立的小节,使用标题和项目符号,便于阅读。最后,可以给出学习建议,比如推荐学习资源或进一步的方向,以增加回答的实用性。</think>### C++ 应用领域详解 C++ 作为一门**高效、灵活、跨平台**的编程语言,凭借其对硬件底层的高度控制能力和卓越性能,在多个领域占据核心地位。以下是其主要应用方向及典型场景: --- #### 一、系统级开发 ▋ **核心优势**:直接内存管理、硬件操作能力 - **操作系统**:Windows 内核组件、Linux 内核模块 - **设备驱动**:打印机驱动、GPU 驱动开发 - **嵌入式系统**:智能家电控制、工业控制器(如西门子 PLC 编程) ```cpp // 嵌入式寄存器操作示例 volatile uint32_t* GPIO_PORT = (uint32_t*)0x40020000; *GPIO_PORT |= 0x01; // 设置GPIO引脚为高电平 ``` --- #### 二、游戏开发 ▋ **行业统治级语言**:3A 游戏引擎首选 - **游戏引擎**:Unreal Engine、CryEngine、Unity 底层模块 - **物理引擎**:Havok Physics、Bullet Physics - **实时渲染**:DirectX/Vulkan 图形 API 调用 ```cpp // 游戏对象更新伪代码 void GameObject::Update(float deltaTime) { position += velocity * deltaTime; collisionSystem.CheckCollisions(this); } ``` --- #### 三、高性能计算 ▋ **科学计算与工程仿真** - **数值分析**:MATLAB 底层计算内核 - **有限元分析**:ANSYS、Abaqus 求解器 - **量化金融**:期权定价算法、风险模型 ```cpp // 并行计算蒙特卡洛模拟 #pragma omp parallel for for(int i=0; i<1e6; ++i){ double price = calculateOptionPrice(paths[i]); results[i] = price; } ``` --- #### 四、图形与多媒体 ▋ **图形处理核心领域** - **图像处理**:Photoshop 滤镜、医学影像处理(如 CT 重建) - **计算机视觉**:OpenCV 库、自动驾驶感知系统 - **音视频编解码**:FFmpeg、WebRTC 音视频引擎 ```cpp // OpenCV 图像处理示例 cv::Mat img = cv::imread("input.jpg"); cv::GaussianBlur(img, img, cv::Size(5,5), 0); cv::Canny(img, edges, 50, 150); ``` --- #### 五、数据库与分布式系统 ▋ **底层基础设施构建** - **数据库系统**:MySQL 存储引擎、MongoDB 查询优化器 - **分布式中间件**:Redis 核心模块、Kafka 消息队列 - **区块链技术**:EOS 智能合约虚拟机 ```cpp // 数据库B+树索引实现片段 BPlusTree<Key, Record>::Insert(const Key& key, Record* record){ Node* leaf = FindLeafNode(key); leaf->InsertSorted(key, record); if(leaf->Overflow()) SplitNode(leaf); } ``` --- #### 六、物联网与实时系统 ▋ **严格实时性要求场景** - **工业物联网**:PLC 控制程序、SCADA 系统 - **自动驾驶**:Apollo 自动驾驶决策模块 - **航空航天**:火星探测器导航系统(如 Perseverance 的飞行软件) ```cpp // 实时控制系统示例 void ControlLoop() { while(true) { SensorData data = ReadSensors(); ActuatorCommand cmd = ComputeControl(data); SendCommand(cmd); std::this_thread::sleep_for(1ms); // 严格时序控制 } } ``` --- ### 技术优势对比表 | 领域 | C++优势 | 替代语言对比 | |---------------------|-------------------------------------------------------------------------|---------------------------| | 游戏开发 | 直接内存控制优化缓存命中率 | C#需通过unsafe代码突破限制| | 高频交易 | 纳秒级延迟控制能力 | Java受GC停顿限制 | | 嵌入式开发 | 可编译为紧凑机器码(<100KB常见) | Python无法满足资源约束 | | 操作系统开发 | 可直接嵌入汇编代码 | Rust生态仍在建设中 | --- ### 学习建议路线 1. **基础进阶**:掌握 RAII、移动语义、模板元编程 2. **领域专精**:根据目标方向学习: - 游戏开发:OpenGL/DirectX + 物理数学 - 量化金融:并行算法 + 统计模型 - 嵌入式:RTOS + 硬件接口协议 3. **工具链掌握**: - 调试工具:GDB、Valgrind - 构建系统:CMake + Conan - 性能分析:perf、VTune C++ 的复杂性使其学习曲线陡峭,但其在**性能敏感型系统**中的不可替代性,使其在可预见的未来仍将保持重要地位。建议通过实际项目(如实现简易 STL、微型数据库、游戏引擎模块)深化理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值