C++——从C语言快速入门

目录

一、数组

1、声明数组

2、初始化数组

3、访问数组元素

4、示例

5、注意事项

6、数组小练习

计算器支持加减乘除

数组找最大值

二、指针

三、字符串 string 类型


一、数组

在 C++ 中,数组是一种存储固定大小的相同类型元素的序列。数组的所有元素都存储在连续的内存位置上。这种数据结构非常适合于存储具有固定数量和相同数据类型的元素集合。

1、声明数组

声明数组的基本语法如下:

数据类型 数组名[数组大小];

例如,声明一个类型为 int 的数组,包含 10 个元素:

int myArray[10];
2、初始化数组

在声明数组时,您可以同时初始化数组:

int myArray[5] = {10, 20, 30, 40, 50};

如果您在初始化数组时没有指定所有元素的值,未初始化的元素将被自动设置为该数据类型的默认值(对于基本数据类型通常是 0):

int myArray[5] = {10, 20}; // 其余元素将被初始化为 0
3、访问数组元素

您可以通过指定索引来访问数组中的元素。数组索引是从 0 开始的,所以数组的第一个元素是 数组名[0] ,第二个元素是 数组名[1] ,依此类推:

int value = myArray[2]; // 访问第三个元素
4、示例

以下是使用数组的简单示例:

#include <iostream>

using namespace std;

int main()
{
    int myArray[5] = {11, 22, 33, 44, 55};

    // 输出所有数组元素的值
    for(int i = 0; i < 5; i++)
    {
        cout << "Element at index " << i << ":" << myArray[i] << endl;
    }

    return 0;
}

5、注意事项
  • 数组的大小必须在编译时已知,且不能更改。
  • 数组索引越界是常见的错误,可能会导致未定义的行为。
  • 对于更复杂的用例,您可能需要使用 C++ 的标准模板库(STL)中的容器,如 std::vector ,它提供了可以动态改变大小的数组。
  • 数组的元素存储在连续的内存位置上,这使得访问数组元素非常快。
6、数组小练习
计算器支持加减乘除

1、用C语言思路编写

#include <iostream>

using namespace std;

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

int minu(int a,int b)
{
    return a-b;
}

int mul(int a,int b)
{
    return a*b;
}

float diliv(int a,int b)
{
    return a/b;
}

int main()
{
    int a = 0;
    int b = 0;
    char cal;

    while(1)
    {
        cout << "请输入两个数: " << endl;
        cin >> a;
        cin >> b;
        cout << "请输入运算符号+、-、*、/" << endl;
        cin >> cal;
        switch (cal)
        {
            case '+':
                cout << "两数之和是: " << add(a,b) << endl;
                break;
            case '-':
                cout << "两数之差是: " << minu(a,b) << endl;
                break;
            case '*':
                cout << "两数之积是: " << mul(a,b) << endl;
                break;
            case '/':
                cout << "两数之余是: " << diliv(a,b) << endl;
                break;
        }
    }
    return 0;
}

2、用 Lambda 表达式编写

#include <iostream>

using namespace std;

int main()
{
    int a = 0;
    int b = 0;
    char cal;

    auto add = [](int a,int b)->int{return a+b;};
    auto minu = [](int a,int b)->int{return a-b;};
    auto mul = [](int a,int b)->int{return a*b;};
    auto diliv = [](int a,int b)->float{return a/b;};

    while(1)
    {
        cout << "请输入两个数: " << endl;
        cin >> a;
        cin >> b;
        cout << "请输入运算符号+、-、*、/" << endl;
        cin >> cal;
        switch (cal)
        {
            case '+':
                cout << "两数之和是: " << add(a,b) << endl;
                break;
            case '-':
                cout << "两数之差是: " << minu(a,b) << endl;
                break;
            case '*':
                cout << "两数之积是: " << mul(a,b) << endl;
                break;
            case '/':
                cout << "两数之余是: " << diliv(a,b) << endl;
                break;
        }
    }
    return 0;
}

数组找最大值
#include <iostream>

using namespace std;

void initArry(int *arry, int len)
{
    for(int i=0; i< len; i++){
        cout << "请输入第" << i+1 << "个数" << endl;
        cin >> arry[i];
    }
}

void printArry(int *arry,int len)
{
    for(int i=0; i< len; i++){
        cout << arry[i] << endl;
    }
}
int getMaxFromArray(int *arry, int len )
{
    int maxTmp = arry[0];
    for(int i=0; i< len; i++){
        if(maxTmp < arry[i])
            maxTmp = arry[i];
    }
    return maxTmp;
}
int main() {
    int arry[5];
    int len = sizeof(arry)/sizeof(arry[0]);
    initArry(arry,len);
    printArry(arry,len);
    cout << "最大数是:" << getMaxFromArray(arry,len) << endl;
}

二、指针

C++完全兼容C语言指针,多出一个 this 指针,在面向对象中再讲解。

这里用一个数值交换的简单函数做以示范:

#include <iostream>

using namespace std;

void swap(int *pa, int *pb)
{
    int tmp;
    tmp = *pa;
    *pa = *pb;
    *pb = tmp;
}
int main()
{
    int a = 10;
    int b = 20;

    cout << a << endl;
    cout << b << endl;

    cout << "两个数发生交换后是:" << endl;
    swap(&a,&b);

    cout << a << endl;
    cout << b << endl;
}

三、字符串 string 类型

C语言中对字符串的表示通常用指针,新手会面临内存泄漏或者段错误等众多问题。

在 C++ 中, string 类是标准库的一部分,用于表示和操作字符串。它是对传统的 C 风格字符串(以空字符 '\0' 结尾的字符数组)的一个更安全、更方便的封装。 string 类是在 <string> 头文件中定义的,并且位于 std 命名空间中

string 类提供了许多有用的功能和特性,包括:

  1. 动态大小:与 C 风格的字符串不同, string 对象可以动态改变大小,这意味着你可以在运行时添加或移除字符,而不需要担心分配和释放内存
  2. 安全性:由于 string 管理其自己的内存,因此减少了内存泄漏和缓冲区溢出的风险。
  3. 方便的成员函数: string 类提供了各种操作字符串的方法,如 append() (添加)、 insert() (插入)、 erase() (删除)、 substr() (获取子字符串)等。
  4. 操作符重载: string 类重载了多个操作符,使得字符串比较、连接和赋值更加直观。例如,你可以使用 + 操作符来连接两个字符串,或者使用 == 操作符来比较两个字符串是否相等
  5. 迭代器支持:像其他标准库容器一样, string 类也支持迭代器,使得你可以使用迭代器来遍历字符串中的字符
  6. 与 C 风格字符串的兼容性: string 类提供了与 C 风格字符串互操作的功能,例如,你可以使用 c_str() 方法来获取一个与 C 风格字符串兼容的、以 null 结尾的字符数组

下面是一个简单的 string 类的使用示例:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, world!";
    std::cout << str << std::endl; // 输出字符串
    str += " I am a C++ string."; // 字符串连接
    std::cout << str << std::endl;
    std::string substr = str.substr(7, 5); // 获取子字符串
    std::cout << "Substring: " << substr << std::endl;
    return 0;
}

在这个示例中,我们创建了一个 string 对象 str ,然后使用不同的方法对其进行操作。这展示了 string 类的灵活性和强大功能。

下面是一个表格,展示了 C++ 中 std::string 类的一些常用成员函数及其功能和参数:

这些函数是 std::string 类中常用的一部分,提供了强大且灵活的字符串操作能力。使用这些函数可以方便地处理和修改字符串数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/680465.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

半导体人才荒,何解?

过去两年&#xff0c;全球半导体行业陷入寒冬&#xff0c;砍单、裁员、减产、倒闭等各种负面消息接踵而至。 2024年来&#xff0c;在全球半导体产业经历周期性下滑后&#xff0c;逐渐迎来复苏&#xff0c;市场景气向好。据WSTS预测&#xff0c;2024年全球半导体市场将同比增长…

四川古力未来科技抖音小店靠谱之选,购物新体验

在当今数字化浪潮下&#xff0c;抖音小店作为新兴的电商平台&#xff0c;正以其独特的魅力和便捷性&#xff0c;吸引着越来越多的消费者。而四川古力未来科技抖音小店&#xff0c;凭借其优质的产品、完善的服务和良好的口碑&#xff0c;成为了众多消费者的靠谱之选。 四川古力未…

Paraformer解读(1)基于self-attention和dfsmn的encoder

DFSMN SAN-M python实现 import torch import torch.nn as nn import torch.nn.functional as Fclass PositionalEncoding(nn.Module):def __init__(self, d_model, dropout0.1, max_len5000):super(PositionalEncoding, self).__init__()self.dropout nn.Dropout(pdropout)p…

国资国企如何高效实现数据监管报送

为深入贯彻国家关于数字经济与实体经济融合发展的重要指示&#xff0c;结合国资监管信息系统的规范要求&#xff0c;亿信华辰积极响应&#xff0c;助力国企走上数字化转型的道路。应对国资国企监管要求&#xff0c;国资国企监管数据填报平台作为数字化建设的关键环节&#xff0…

【Vue】——前端框架的基本使用

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

超声波清洗机哪个品牌好用点?四款超卓超声波清洗机疯狂安利!

在这个注重效率与清洁卫生的时代&#xff0c;小型超声波清洗机因其便携性、高效能以及出色的清洁效果&#xff0c;成为了家庭和小型工作室的必备神器。无论是清洗珠宝、眼镜、化妆刷&#xff0c;还是日常的金属餐具和电子产品&#xff0c;小型超声波清洗机都能轻松应对&#xf…

操作失败——后端

控制台观察&#xff0c;页面发送的保存菜品的请求 返回的response显示&#xff1a; ---------- 我开始查看明明感觉都挺正常&#xff0c;没啥错误&#xff0c;就是查不出来。结果后面电脑关机重启后&#xff0c;隔一天看&#xff0c;就突然可以了。我觉着可能是浏览器的缓存没…

C# 声音强度图绘制

C# 声音强度图绘制 采集PCM音频数据 音频原来自麦克风 音频源来自录音文件 处理PCM音频数据 将PCM数据进行强度值换算 private void UpdateVoice(double[] audio){// 计算RMS值double rms Math.Sqrt(audio.Select(x > x * x).Average());// 将RMS值转换为分贝值&#x…

常用的接口测试工具

大家好&#xff0c;当谈到软件开发中的质量保证时&#xff0c;接口测试无疑是至关重要的一环。在当今快节奏的开发环境中&#xff0c;确保应用程序的各个组件之间的交互正常运作是至关重要的。而接口测试工具则成为了开发人员和测试人员的得力助手&#xff0c;帮助他们有效地测…

Java版电商平台B2B2C:多商家直播商城系统特性解析

B2B2C平台&#xff0c;立足于传统电商领域&#xff0c;同时引入了创新的商业模式。该平台不仅支持商家入驻和平台自营&#xff0c;还积极构建了一个全新的市场环境&#xff0c;旨在为各行各业及互联网创业者提供更多收益机会。 该平台以消费者需求为中心&#xff0c;帮助企业构…

什么是人机协同翻译

什么是人机协同翻译 序什么是人机协同翻译账号绑定服务开通文档翻译图片翻译体验感受及建议 序 什么是人机协同翻译&#xff0c;为什么会需要人机协同翻译&#xff0c;以及人机协同翻译的效果&#xff0c;应用场景等&#xff0c;本文将关于这些内容一一解答。 什么是人机协同…

全平台自定义小程序源码系统 一个后台控制7端 自主设计属于你的小程序 前后端带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代&#xff0c;小程序以其轻量级、跨平台、即用即走的特点&#xff0c;成为企业、个人及开发者们追捧的热门工具。为了满足不同用户的需求&#xff0c;小编给大家分享一款全平台自定义小程序源码系统。该系统通过一套强大的后台管理系统&#xff0c;实…

SD NAND的垃圾回收机制:无人机数据管理的隐形守护者

随着科技的飞速发展&#xff0c;无人机在各个领域的应用越来越广泛&#xff0c;从航拍到物流配送&#xff0c;再到农业监测&#xff0c;无人机正逐渐成为我们生活中不可或缺的一部分。而SD NAND作为一种创新的存储芯片&#xff0c;可以直接贴片使用&#xff0c;具有小尺寸、高可…

机台数据导出难住IT管理员,如何才能解决IT人员的困境?

为了方便数据的共享、保存、分析、合规性和迁移等目的&#xff0c;企业会按规律性的时间周期进行机台数据的导出操作&#xff0c;通过专业的数据迁移软件、外部存储设备&#xff08;如USB硬盘、移动硬盘、SD卡等&#xff09;&#xff0c;或者通过机台设备的专用导出功能来完成。…

MoE 混合专家模型(Mixture of Experts)

参考&#xff1a;深度揭秘爆火MoE&#xff01;GPT-4关键架构&#xff0c;成开源模型逆袭杀手锏 (baidu.com) MoE是一种神经网络架构设计&#xff0c;在Transformer模块中集成了专家/模型层。 当数据流经MoE层时&#xff0c;每个输入token都会动态路由到专家子模型进行处理。当…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具&#xff1a; 1、下载Rufus(主角)软件 2、准备一个U盘或硬盘&#xff08;小白128G足够&#xff0c;装Ubuntu系统&#xff09; 3、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看一下官网介绍&#xff1a; Rufus 是一款格式化和创建 USB 启动盘的辅助工…

直播商城源码-PC+APP+H5+小程序现成源码

随着电商行业的不断演进&#xff0c;直播商城已成为连接消费者和商品的新兴桥梁。直播商城源码提供了一个完整的解决方案&#xff0c;使得企业能够迅速搭建起一个覆盖PC、APP、H5和小程序的全渠道电商平台。本文将探讨直播商城源码的优势、关键功能以及如何选择适合的现成源码。…

银河麒麟操作系统 v10 离线安装 mysql 8.4.0

一 查看系统环境 [root0003 ~]# cat /etc/os os-release ostree/ [root0003 ~]# cat /etc/os-release NAME"Kylin Linux Advanced Server" VERSION"V10 (Lance)" ID"kylin" VERSION_ID"V10" PRETTY_NAME"Kylin Linux Ad…

嵌入式Linux系统编程 — 1.5 文件描述符详解

目录 1 文件描述符简介 1.1 文件描述符特点 1.2 标准文件描述符 1.3 文件描述符的生命周期 2 fcntl()函数 2.1 fcntl()函数简介 2.2 复制文件描述符(F_DUPFD) 2.3 获取/设置文件状态标志(F_GETFL/F_SETFL ) 1 文件描述符简介 文件描述符&#xff08;File Descriptor&a…

绘画新手必备!六款免费易用的绘图软件推荐

在当今的数字世界里有各种各样的设计创作工具&#xff0c;那么问题来了我们应该如何在众多免费绘图软件中选择呢&#xff1f;为了回答这个问题&#xff0c;我们将在本文中介绍和测评六个领先的绘图软件。每一个都有自己独特的特点和优势&#xff0c;适合不同的需求和用户。以下…