从C语言的使用转换到C++(上篇)——刷题、竞赛篇

news2024/11/13 16:15:31

 

文章目录

一、C++的基础语法详解

1、1 输入、输出流

1、2 C++中头文件的使用

1、3 C++中变量的声明

1、4 C++中的string类

1、5 C++中的引用&

二、C++中常见函数使用详解

2、1 排序sort函数详解

2、2 cctype头文件中的函数

三、总结


标题:从C语言的使用转换到C++(上篇)——刷题、竞赛篇

作者:@Ggggggtm

寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景

  本文章讲述的内容是放弃C语言使用C++进行刷题。当熟练掌握C语言时,转换到C++是很简单的,并不需要花费太大的精力。为什么要使用C++进行刷题呢?首先,C++拥有丰富的STL标准模版库,这也是PAT甲级、LeetCode等题目中经常需要用到的,早纯使用C语言解决问题会比C++的STL解决该问题麻烦很多。其次,C++的string十分好用。比c语言里面的char数组好用多啦。C++可以在某一变量使用前随时定义该变量,非常方便。同时,C++向下兼容c,c语言里面的语法完全可以在C++文件中运行,所以字习C++对刷身法时漏在后司的表达能力进行扩充有益无害,例如c语言的输入输出( scanf和 printf )比C++快,那么就可以在使用C++刷算法同时使用scanf和printf 提高代码运行效率。具体细节我们都会介绍到。由于内容细节较多,所以我们分为两篇来详细介绍。本篇文章我们会讲述到基础语法和常用的一些函数。

一、C++的基础语法详解

1、1 输入、输出流

  什么是输入输出流呢?我们先来看一段代码: 

#include <iostream>
using namespace std;
int main() 
{
    int n;
    cin >> n;
    cout << "hello, liuchuo" << n + 1 << endl;
    return 0;
}

  就如同scanf和printf 在 stdio.h头文件中一样,cin和 cout在头文件 iostream里面,看名字就知道, io是输入输出 input和output的首字母,stream是流,所以这个iostream头文件里包含的方法就是管理一些输入输出流的。cin和cout比较方便,不用像C语言里的 scanf 、 printf 那样写得那样繁琐, cin >> n;和scanf(%d", &n)一样的意思(而且用cin再也不用担心像scanf 一样忘记写取地址符&了),注意cin是向右的箭头,表示将内容输入到n 中。同样, cout << n和 printf("%d", n)一样的意思,此时cout是向左的两个箭头,注意和cin区分开来。而且不管n是double还是 int或者是char类型,只用写cin >> n和cout <<n这样简单的语句就好,不用像c语言中需要根据n的类型对应地写%lf 、%d 、%c。

  我们看到上术代码中有using namespace std。这句话是使用"std”这个名称空间( namespace )的意思。因为有的时候不同厂商定义的函数名称彼此之间可能会重复,为了避免冲突,就给所有的函数都封装在各自的名称空间里面,使用这个函数的时候就在main函数前面写明用了什么名称空间,几乎在C++中使用到的一些方法如cin .cout 都是在std名称空间里面的,所以可以看到using namespace std这句话几乎成了我每段C++代码的标配,就和return 0一样必须有。

1、2 C++中头文件的使用

  C++的头文件一般是没有像c语言的.h这样的扩展后缀的,一般情况下c语言里面的头文件去掉.h然后在前面加个c就可以继续在C++文件中使用c语言头文件中的函数。比如:

#include <cmath>  //相当于C语言里面的#include <math.h>
#include <cctype>)  //相当于C语言里面的#include <ctype.h>
#include <cstring>  //相当于C语言里面的#include <string.h>
#include <cstdio>  //相当于C语言里面的#include <stdio.h>

1、3 C++中变量的声明

  C语言的变量声明一般都在函数的开头,但是C++在首次使用变量之前声明即可。(当然也可以都放在函数的开头),而且一般C语言里面会在 for 循环的外面定义变量,但是C++里面可以在 for 循环内部定义。而且在 for 循环里面定义的局部变量,在循环外面就失效了(就是脱离这个局部作用域就会查无此变量的意思),所以一个main函数里面可以定义好多次局部变量i,不用担心写的循环太多变量名i、j 、k不够用。我们看如下代码:

#include <iostream>
using namespace std;
int main() 
{
    int n;
    cin >> n;
    cout << "hello, liuchuo" << n + 1 << endl;
    int m;
    cin >> m;
    for (int i = 0; i < n; i++) 
    { 
        cout << i;
    }
    for (int i = 0; i < m; i++)
    { 
        cout << i + 2;
    }
    return 0;
}

1、4 C++中的string类

  以前用char[]的方式处理字符串很繁琐,现在有了string类,定义、拼接、输出、处理都更加简单。不过string只能用cin和cout处理,无法用scanf和printf 处理。我们看如下代码:

string s = "hello world"; //赋值字符串
string s2 = s;
string s3 = s + s2; // 字符串拼接直接用+
string s4;
cin >> s4; // 输入字符串
cout << s; // 输出字符串

  用cin读入的字符串是以空格为分隔符的,要想读入一行字符串的话,可以用getline()函数。s的长度可以用s.length()获取(有几个字符就是长度多少,不存在char[]里面的什么末尾的结束符之类的)。

1、5 C++中的引用&

  这个引用符号&要和c语言里面的取地址运算符&区分开来,他们没有什么关系,C++里面的引用是指在变量名之前加一个&符号,比如在函数传入的参数中int &a ,那么对这个引用变量a做的所有操作都是直接对传入的原变量进行的操作,并没有像原来int a一样只是拷贝一个副本(传值),举两个例子:

//例1
void func(int a) 
{
    a = 99; //a在这里是形参,是对实参的一份临时拷贝
}
int main() 
{
    int n = 0;
    func(n); //n并不会改变
}


//例2
void func(int a) 
{
    a = 99; //a在这里是形参,是对实参的一份临时拷贝
}
int main() 
{
    int n = 0;
    func(n); //n并不会改变
}

二、C++中常见函数使用详解

2、1 排序sort函数详解

   sort函数在头文件#include <algorithm>里面,主要是对一个数组进行排序(int arr[]数组或者vector数组都行) , vector是容器,要用v.begin()和 v.end()表示头尾;而int arr[]用arr 表示数组的首地址,arr+n表示尾部。我们结合代码一起理解一下,代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) 
{ 
	return a > b; //从小到大
}
int main() 
{
	vector<int> v(10);
	for (int i = 0; i < 10; i++) 
	{
		cin >> v[i];
	}
	sort(v.begin(), v.end());  //默认从小到大
	int arr[10];
	for (int i = 0; i < 10; i++) 
	{
		cin >> arr[i];
	}
	sort(arr, arr + 10, cmp);
	return 0;
}

2、2 cctype头文件中的函数

  刚刚在头文件那一段中也提到,#include <cctype>本质上来源于c语言标准函数库中的头文件 #include<ctype.h> ,其实并不属于C++新特性的范畴,在刷PAT一些字符串逻辑题的时候也经常用到,但是很多人似乎不了解这个头文件中的函数,所以在这里单独提一下。

  可能平时我们判断—个字符是否是字母,可能会写︰ 

char c;
cin >> c;
if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') 
{
    cout << "c is alpha";
}

  但是在cctype中已经定义好了判断这些字符应该所属的范围,直接引入这个头文件并且使用里面的函数判断即可,无需自己手写(自己手写有时候可能写错或者漏写) 。代码如下: 

#include <iostream>
#include <cctype>
using namespace std;
int main() 
{
    char c;
    cin >> c;
    if (isalpha(c)) 
    {
        cout << "c is alpha";
    }
    return 0;
}

  不仅仅能判断字母,还能判断数字、小写字母、大写字母等.C++官方文档中对这些函数归纳成了一个表格,如下图:

三、总结

   我们本章的内容相对来说基础一些,也是很容易掌握的。下篇文章我们会讲述C++STL库中的一些容器。前提是我们要掌握本片章节的内容。

  希望本篇文章会对你有所帮助,感谢观看ovo~

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

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

相关文章

④【Spring】IOC - 基于注解方式 管理bean

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 注解管理Bean一、注解的功能二、四个典型注解三…

day24|491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情况…

源码深度解析Spring Bean的创建,手把手的一步一步带你看源码

在源码深度解析Spring Bean的加载 中对Bean的加载源码进行了梳理,在本文将对bean的创建进行梳理 在doGetBean()方法中createBean()方法准备创建bean,调用源码如下: createBean() 方法的源码如下: 从代码中可以得出,createBean() 方法涉及4个步骤: 步骤一: 根据设置的class属…

[论文笔记]A ConvNet for the 2020s

目录 Abstract Modernizing a ConvNet: a Roadmap 2.1.Training Techniques 2.2. Macro Design 2.3. ResNeXt-ify 2.4. Inverted Bottleneck 2.5. Large Kernel Sizes 2.6. Micro Design 论文&#xff1a;https://arxiv.org/abs/2201.03545 代码&#xff1a;GitHub - f…

扩散模型(Diffusion model)代码详细解读

扩散模型代码详细解读 代码地址&#xff1a;denoising-diffusion-pytorch/denoising_diffusion_pytorch.py at main lucidrains/denoising-diffusion-pytorch (github.com) 前向过程和后向过程的代码都在GaussianDiffusion​这个类中。​ 常见问题解决 Why self-condition…

盒相关样式-----diaplay:block、inline

盒的基本类型 CSS中的盒分为block类型与inline类型&#xff0c;例如&#xff0c; div元素与p元素属于block类型&#xff0c; span元素与a元素属于inline类型。 block类型的盒对应的是html中的块级元素&#xff0c;inline类型的盒对应了html中的行内元素。 行内元素与块级元素…

JavaScript 练手小技巧:键盘事件

键盘事件应该是鼠标事件之外&#xff0c;使用频率最高的 JS 事件了吧&#xff1f; 一般用于全局或者表单。 键盘事件由用户击打键盘触发&#xff0c;主要有keydown、keypress、keyup三个事件。 keydown&#xff1a;按下键盘时触发。Ctrl、Shift、Alt 等和其它按键组合时&…

BCNF与3NF

今天学了一下午这个BCNFBCNFBCNF与3NF3NF3NF&#xff0c;有感而发&#xff0c;特来总结。好像好久不打键盘了&#xff0c;这手好像刚长出来的一样。本文浅显的分析一下两种范式的关系与不同以及判断方法和分解算法&#xff0c;以做总结。 BCNFBCNFBCNF范式的定义如下: 设属性集…

linux 常用指令大全

目录一、基本指令指令基本格式1、ls1.1 ls相关选项2、pwd3、cd4、mkdir4.1、mkdir相关选项5、touch6、cp6.1 cp相关选项7、mv8、rm8.1、rm相关选项9、输出重定向10、cat11、df11.1、df 相关选项12、free12.1、free 相关选项13、head13.1、head相关选项14、tail14.1 tail相关选项…

day13 二叉树 | 144、二叉树的前序遍历 145、二叉树的后序遍历 54、二叉树的中序遍历

二叉树基础 二叉搜索树 二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b;若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值&#xff1b;它的左、右子树也分别为二叉排序树 下面这两棵…

零食商城|基于springboot的零食商城

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

GuLi商城-简介-项目介绍、分布式基础概念、微服务架构图

一、项目简介 1 、项目背景 1 &#xff09;、电商模式 市面上有 5 种常见的电商模式 B2B、B2C、C2B、C2C、O2O&#xff1b; 1 、 B2B 模式 B2B (Business to Business)&#xff0c; 是指商家与商家建立的商业关系。 如&#xff1a;阿里巴巴 2 、 B2C 模式 B2C (Business…

Win7安装高版本的NodeJS方法,亲测可用

Win7安装高版本的NodeJS方法 正常情况下&#xff0c;Win7所能支持的Node.js最高版本为:V13.14&#xff0c;在开发过程中&#xff0c;git下来的项目由于node版本比较高的原因&#xff0c;好多package都不能还原或出现诸多警告 网络大神分享的安装高版本的方法&#xff1a; 1、…

Express 通过 CORS 或 JSONP 解决跨域问题

文章目录参考描述同源策略同源同源策略示例CSRF 攻击解决跨域问题CORSCORS 响应头部Access-Control-Allow-Origin简单请求预检请求预检请求包含的两次请求解决CORS 中间件使用 CORS 中间件处理跨域请求JSONP通过原生 JS 向服务器端发起 JSONP 请求通过 jQuery 向客户端发起 JSO…

mysql:如何在windows环境下配置并随意切换两种mysql版本

系列文章目录 文章目录系列文章目录前言一、去官网下载zip安装包二、配置创建my.ini文件2.环境变量3、使用管理员身份打开dos命令窗口4、安装mysql8的服务和初始化data5、启动6 错误解决&#xff1a;修改mysql8服务的注册表最后前言 之前安装过5.7的版本 后来由于需要 就安装了…

天龙八部TLBB从0到1搭建教程-上

服务器的配置选择与购买 我们需要准备的东西,是环境安装和4核8G的服务器一台。 其实购买服务器的地方很多以下这些服务商都可以,具体看服务器的配置选择,像这种4核8G的 服务器价格在260-400之间一台仅供参考,当然还有带防的服务器价格就偏高了阿里云、腾讯、百度、西部数码…

年后公司新来一00后卷王,我们这帮老油条真干不过.....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 2023年春…

MySQL深分页 + 多字段排序场景的优化方案【三百万级数据量】

需求背景 目前产品需要针对一个大范围地区内的所有用户做排行榜功能&#xff0c;且这个排行榜有几个比较蛋疼的附加需求&#xff1a; 排行榜需要全量展示所有用户&#xff0c;且做分页展示&#xff08;大坑&#x1f4a5;&#xff09; 排行榜有4种排序条件&#xff0c;且每个排…

fatal error怎么解决,有什么快捷的解决方法

fatal error怎么解决&#xff0c;其实是有多种的解决方法的&#xff0c;主要是看你想用哪种解决方法去进行解决&#xff0c;下面一起来看看。 一.fatal error的解决方法 1、按winR&#xff0c;弹出运行窗口。 2、输入regedit点击确定&#xff0c;弹出注册表编辑器。 3、在注…

2023年数据库优化顶级原理

毫不夸张的说咱们后端工程师&#xff0c;无论在哪家公司&#xff0c;呆在哪个团队&#xff0c;做哪个系统&#xff0c;遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论&#xff0c;能让大家快速、准确的去选择出合适的优化方案&#xff0c;我相信…