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

news2024/10/6 20:28:40

目录

一、数组

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 类中常用的一部分,提供了强大且灵活的字符串操作能力。使用这些函数可以方便地处理和修改字符串数据。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django中使用Celery和APScheduler实现定时任务

在之前的文章我们已经学习了Celery和APScheduler的基本使用&#xff0c;下面让我们来了解一下如何在Django中使用Celery和APScheduler Celery 1.前提工作 python 3.7 pip install celery pip install eventlet #5.0版本以下 pip install importlib-metadata4.8.3&#xff08…

批量修改文件

最近几个月的文章都直接发在公众号上&#xff0c;没有同步到博客上&#xff0c;想去同步时发现已经有不少了&#xff0c;一个个修改太麻烦了。 之前没规划好&#xff0c;所以博客文章都是直接放在仓库一个目录下&#xff0c;数量多了之后&#xff0c;有点乱&#xff0c;不好管…

工业交换机如何防止广播风暴

工业交换机作为网络设备的重要组成部分&#xff0c;在网络中起到了连接各个设备和传输数据的重要作用。然而&#xff0c;广播风暴是工业交换机面临的一个常见问题&#xff0c;会影响网络性能和稳定性。为了防止广播风暴的发生&#xff0c;工业交换机可以采取一系列有效的措施。…

[数据集][目标检测]吉他检测数据集VOC+YOLO格式66张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;66 标注数量(xml文件个数)&#xff1a;66 标注数量(txt文件个数)&#xff1a;66 标注类别数…

qt中使用QSLite时发现query.value(0).toInt()未获取数据问题

1、首先确保数据库名没有问题 2、确保正常连接 3、非常重要的一点&#xff1a;query.value(0).toInt()之前&#xff0c;必须要有query.first()&#xff0c;非常重要&#xff0c;缺少了这个会一直查不到

ruoyi-nbcio基于jeecg的flowable前端支持自定义表单组件的自动获取方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

什么时候需要用到 @EnableWebSecurity 注解?

有小伙伴在学习 Spring Security 的遇到一个问题&#xff1a; 箭头所指的位置报红&#xff0c;也就是 Spring 容器中没有找到一个类型为 HttpSecurity 的 Bean。 小伙伴说如果他在配置类上加 EnableWebSecurity 注解&#xff0c;就不报错&#xff1b;不加该注解则会报错。那么…

如何快速定位到影响mysql cpu飙升的原因——筑梦之路

通常我们只需要执行show processlist 进行查看&#xff0c;一般执行时间最长的SQL八九不离十就是罪魁祸首&#xff0c;但当show processlist的输出有近千条&#xff0c;那么很难第一眼就发现有问题的SQL&#xff0c;那么如何快速找到呢&#xff1f;其实也非常简单。我们知道mys…

什么样的男士内裤比较好?按这个方法选男士内裤不会出错!

男士内裤作为日常穿着的重要服饰&#xff0c;其舒适度与卫生性对男士们的健康至关重要。随着时代的变迁&#xff0c;男士内裤的款式与材质也日益丰富多样&#xff0c;为男士们提供了更多选择。 目前市场上&#xff0c;男士内裤主要分为三角、平角和四角三大类别。其中&#xf…

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

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

ai对话虚拟人app有哪些?一起来看看这3款

ai对话虚拟人app有哪些&#xff1f;在当前的科技浪潮中&#xff0c;AI对话虚拟人app已经成为我们日常生活中的得力助手。它们不仅提供了更加智能、便捷的交流和信息服务&#xff0c;还让我们能随时随地与AI伙伴进行深度互动。这些app的广泛应用&#xff0c;不仅提升了我们的生活…

目标检测数据集 - 海洋垃圾检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;海洋垃圾检测数据集&#xff0c;真实拍摄海洋海底场景高质量垃圾检测图片数据&#xff0c;涉及场景丰富&#xff0c;比如海底塑料垃圾数据、海底铁制品罐状垃圾数据、海底纸张垃圾数据、海洋生物和海底垃圾同框数据、海底探索仪器和海底垃圾同框数据、海…

期刊的分类与级别

在学术界&#xff0c;期刊的分类与级别构成了一个评价学术成果和学者贡献的重要标准&#xff0c;同时也是学术出版与学术交流的基础。然而&#xff0c;对于初涉学者来说&#xff0c;理解期刊的分类与级别可能并不直观。本文旨在提供一个系统性的解释&#xff0c;并阐述为何期刊…

LeetCode刷题之HOT100之跳跃游戏

2024/6/5 今天下起了绵密细雨&#xff0c;空气清新很多。昨晚做的梦较魔幻&#xff0c;可能也是导致我睡觉时业已破损的小米手环8的表腕断裂的因素之一。来到实验室&#xff0c;打扫一下卫生&#xff0c;听听歌&#xff0c;做道题。好不自在呀&#xff01; 1、题目描述 2、逻辑…

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

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

基于SpringBoot+Vue旅游民宿信息管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

Qt报错:libvlc开发的程序,出现Direct3D output全屏窗口

问题描述&#xff1a; 在qt中开发重播模块时&#xff0c;第一次在窗口正常播放&#xff0c;点击重播按钮后会弹出新的Direct3D output窗口播放视频 分析&#xff1a; 因为libvlc_media_player_set_hwnd 这个函数 设置了不存在的窗口句柄&#xff0c;导致vlc视频播放窗口没有嵌…

python11 序列的相关操作

枚举遍历 序列的相关操作 text "hello,python" # in 判断字符是否在序列中&#xff0c;存在返回true,否则返回false print(p是否存在:,(p in text)) print(a是否存在:,(a in text)) # not in 判断字符不在序列中&#xff0c;不存在返回true,否则返回false print(p不…

数据仓库与数据挖掘总复习练习2-3(实验六 2024.6.5)

一、练习2 is_unique是否值唯一 range(范围&#xff0c;步长) head&#xff08;&#xff09;、tail&#xff08;&#xff09;默认显示5条 缺失值情况 计算&#xff08;最少多少元素求和、元素相乘&#xff09; pct_change() latax&#xff08;工具&#xff1a;专用于写公式&a…

贰[2],VisionMaster/.NetCore的WPF应用程序调用控件

1,环境 VisionMaster4.2 VisualStudio2022 WPF/.Net6.0 2,记录原因 .NetFrameWork的WPF应用程序调用添加例程.NetFrameWork的Winform应用程序相应的库,不会出现报错,界面也能正常显示操作,但是.NetCore的程序却总是报错。 2.1,.NetFrameWork的WPF应用程序 注:但是.…