CPP学习

news/2024/11/19 18:43:36/文章来源:https://www.cnblogs.com/lichunlei/p/18555394

CPP算法之路,不涉及面向对象

C++向下兼容C,没有特别强调的地方就用C来写好啦~

(我爱C,我爱C++)

正文

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

头文件

C++的头⽂件⼀般是没有像C语⾔的 .h 这样的扩展后缀的,⼀般情况下C语⾔⾥⾯的头⽂件去掉 .h 然后在前⾯加个 c 就可以继续在C++⽂件中使⽤C语⾔头⽂件中的函数啦~⽐如:

#include <cmath> // 相当于C语⾔⾥⾯的#include <math.h>
#include <cstdio> // 相当于C语⾔⾥⾯的#include <stdio.h>
#include <cctype> // 相当于C语⾔⾥⾯的#include <ctype.h>
#include <cstring> // 相当于C语⾔⾥⾯的#include <string.h>

文件有的使用<>,有的是用"",有什么区别内?

<>先去系统目录中找头文件,如果没有就到当前目录下找。像标准的头文件stdio.h,stdlib.h等就是这个方法

""先在当前目录下找,如果没有就到系统目录下找。主要用于include自定义的头文件

文件后缀有的是.h,有的是.cpp,有什么区别内?

.h中存放类的声明和函数原型

.cpp存放函数体

命名空间using namespace std到底是什么意思

这句话声明了一个命名空间std
命名空间在多人合作写项目时很有用。因为你定义了变量 a,别人也定义了变量 a,这样就重复定义了。如果你在自己的命名空间中定义了 a,别人在别人的命名空间中定义了 a,这样就不重复了,比如:

using namespace xx;
using namespace yy;

xx::a 和 yy::a 虽然都叫 a,但是不是同一个变量。

std 是系统标准的命名空间,为了和用户定义的名字不重复,所以它声明在 std 这个命名空间中。这个空间包括了系统所有的支持,比如cin,cout等等。
如果不加using namespace std; ,就需要在每一行代码前加上std::

std::cin >> n;
std::cout << "hello, chunlei" << n + 1 << endl;

丑丑的。所以还是在一开始加上比较好,省时省力又好看(๑•ᴗ•๑)♡

cin和cout

和printf、scanf一样,cin和cout在头文件iostream中。

关于iostream

看名字就知道,i是input,o是output,所以这个头文件里包含的方法就是管理一些输入输出流的

cin>>n,表示输入
cout<<n,表示输出
非常的清晰方便,不需要写取地址符,不需要写类型,nice~(๑•ᴗ•๑)♡
BUT,虽然cin和cout用起来方便,但是效率不如scanf和printf。所以对算法复杂度不高的题目可以用,对于算法复杂度要求高的题目使用scanf和printf可以提高效率

关于endl和"\n"

可以使用"\n"代替endl,微小区别是endl会比"\n"换行后多一个刷新输出缓冲区的操作。无伤大雅

#include <iostream>
using namespace std;
int main()
{cout << "Hello, world!" << "\n";return 0;
}

如果前面是字符串的话会方便一些

cout << "hello, chunlei~\n";

如果前面是变量的话endl会方便一些

cout << n << endl;

哈哈都可以啦O(∩_∩)O

变量的声明

C语言的变量声明一般都在函数开头,但是C++在首次使用变量之前声明即可。当然也可以都放在函数开头

bool变量

有两个值,true和false。
C++把所有非零值解释为true,零值解释为false。所以直接赋值一个数字给bool变量也是可以的。他会自动根据int值是否为零来决定给bool变量赋值为true还是false

bool flag = true;
bool flag2 = -2; // flag2为true
bool flag3 = 0; // flag3为false

使用const定义变量

和C相同

字符串

C++的字符串有两种形式:C风格字符串和string类
C风格字符串:以null结尾的字符数组
string类好用到停不下来:有了string类,定义、拼接、输出、处理都十分方便

string s = "hello world"; // 赋值
string s2 = s;//赋值
string s3 = s + s2; // 字符串拼接直接⽤+号就可以
string s4;
cin >> s4; // 读⼊字符串
cout << s; // 输出字符串

string中还有个很常用的函数叫做substr,作用是截取某个字符串中的子串

string s2 = s.substr(4); // 表示从下标4开始⼀直到结束
string s3 = s.substr(5, 3); // 表示从下标5开始,3个字符

注意!
1.string只能用cin和cout处理,无法使用scanf和printf
2.用cin读入字符串的时候,是以空格为分隔符的,如果想要读入一整行的字符串,就需要用到getline
3.字符串的长度可以用.length获取,而且有几个字符长度就是多少,不存在字符数组里面的什么末尾结束符之类的(。・ω・。)ノ♡

string s; // 定义⼀个空字符串s
getline(cin, s); // 读取⼀⾏的字符串,包括空格
cout << s.length(); // 输出字符串s的⻓度,包括空格哦

比如输入:chun lei,共有8个字符

指针

(美好的世界怎么可以没有指针₍₍٩( ᐛ )۶₎₎♪)

所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

指针的算术运算

  • 加法运算:可以对指针进行加法运算。当一个指针p加上一个整数n时,结果是指针p向前移动n个元素的大小。例如,如果p是一个int类型的指针,每个int占4个字节,那么p + 1将指向p所指向的下一个int元素。

  • 减法运算:可以对指针进行减法运算。当一个指针p减去一个整数n时,结果是指针p向后移动n个元素的大小。例如,如果p是一个int类型的指针,每个int占4个字节,那么p - 1将指向p所指向的前一个int元素。

  • 指针与指针之间的减法运算:可以计算两个指针之间的距离。当从一个指针p减去另一个指针q时,结果是两个指针之间的元素个数。例如,如果p和q是两个int类型的指针,每个int占4个字节,那么p - q将得到两个指针之间的元素个数。

  • 指针与整数之间的比较运算:可以将指针与整数进行比较运算。可以使用关系运算符(如<、>、<=、>=)对指针和整数进行比较。这种比较通常用于判断指针是否指向某个有效的内存位置。

结构体

(当时C这一块没学好,好好记笔记ing(◞‸◟ ))

定义结构

#include <iostream>
using namespace std;void printbook(struct Books book);struct Books
{string name;string author;string subject;int id;
}book1,book2;int main()
{//book1book1.name="heihei";book1.author="lichunlei";book1.subject="sha";book1.id=1;//book2book2.name="haha";book2.author="lichunlei";book2.subject="ben";book2.id=2;printbook(book1);printbook(book2);return 0;
}void printbook(struct Books book)
{cout << "title : " << book.name <<endl;cout << "author : " << book.author <<endl;cout << "subject : " << book.subject <<endl;cout << "id : " << book.id <<endl;
}

Books是结构体类型名,book是变量名。变量可以定义多个

访问

使用.运算符

作为函数参数

把他当做一个普通的变量就好啦

注意!
C++结构体里面可以定义构造函数

使用结构体的时候,C需要些关键字struct,C++不需要

struct stu {
int grade;
float score;
};
struct stu arr1[10]; // C语⾔⾥⾯需要写成struct stu
stu arr2[10];// C++⾥⾯不⽤写struct,直接写stu就好啦

指向结构的指针

#include <iostream>
using namespace std;//声明一个结构体Books
struct Book{string name;string author;string subject;int id;//构造函数Book(string name, string author, string subject, int id):name(name), author(author), subject(subject), id(id){
}
};//打印
void printBookInfo(const Book& book)
{cout << "name: " << book.name << endl;cout << "author: " << book.author << endl;cout << "subject: " << book.subject << endl;cout << "ID: " << book.id << endl;
}int main()
{
Book book1("C++ Primer", "Bjarne Stroustrup", "Programming", 101);
Book book2("C++ Primer Plus", "Bjarne Stroustrup", "Programming", 102);printBookInfo(book1);
printBookInfo(book2);return 0;
}

定义方式与定义指向其他类型变量的指针相似
struct Books *struct_pointer;

->箭头运算符

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SolidWorks 2024下载与安装教程】

‌SolidWorks 2024是一款由达索系统(Dassault Systemes)开发的三维CAD软件,广泛应用于机械设计、产品开发、工程设计、制造等领域。‌ 该软件以其强大的功能和易学易用的特点,深受工程师和设计师的喜爱。SolidWorks 2024在2024版本中引入了一系列新功能和改进,旨在提高设计效…

20222315 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1、实验内容 1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工…

编程命名规范(网文)

一个好的变量或函数命名,应该能起到自解释的作用,甚至能减少我们代码的注释。 naming-cheatsheet是一个命名备忘录,记录一些常见的规范约定,并提供简单的例子说明。如果能够严格遵守这些规范,相信我们的代码可读性会大大提升,下面就来介绍 naming-cheatsheet 提供的一些建…

MyBatis 学习笔记

MyBatis 执行器 JDBC 的执行过程分为四步:获取数据库连接(Connection) 预编译 SQL(PrepareStatement) 设置参数 执行 SQL(ResultSet)MyBatis 提供了执行器 Executor 将这一过程进行封装,对外提供 SqlSession 让用户通过调用其 API 直接操作数据库,因为 SqlSession 持有…

机器学习:线性回归

章节安排背景介绍 均方根误差MSE 最小二乘法 梯度下降 编程实现背景生活中大多数系统的输入输出关系为线性函数,或者在一定范围内可以近似为线性函数。在一些情形下,直接推断输入与输出的关系是较为困难的。因此,我们会从大量的采样数据中推导系统的输入输出关系。典型的单输…

20222322 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 掌握使用Metasploit和nmap等工具进行前期渗透的方法,并利用四种特定的漏洞对靶机进行攻击。 (1)掌握Metasploit和nmap的用法 学习并熟悉Metasploit框架的基本操作,包括模块搜索(Search)、使用(Use)、展示选项(Show)、设置参数(Set)以及执行攻击(Exploi…

ETL之kettle 专业陪伴群,1元开启kettle精进之旅

1、为啥收取1元? 确保只有真正感兴趣或有意愿的用户才会加入。减少无关人员的加入,保持群组的专业性和活跃度。 付费入群可以减少垃圾信息的发送,因为发垃圾信息的人不太可能愿意为发送广告付费。 2、送人玫瑰手留余香自从公众号连载了90+篇关于kettle的干活文章,不到半年时…

SpringBoot:SpringBoot集成E-mail邮件发送功能

前言今天做项目时有个需求是:用公司邮箱给客户发送邮件通知,然后上网冲浪找到一些不错的文章,通过优化并实现功能后,写这篇文章记录一下,也提供给大家做参考。 前期准备 在编写代码前,我们需要获取到一些信息用于后续邮件发送功能,需要获取的信息为:协议服务器地址、邮…

控制之美1-第七章 PID控制

目录7.1 引子7.2 比例控制 7.1 引子 \[7000 \frac{dx(t)}{dt}+10ax(t)=u(t)+d(t) \]\(u(t)\) 是体重变化, \(u(t)=E_i-E_a\), \(E_i\) 是热 量摄入 ,\(E_a\) 是运动消耗, \(x(t)\) 系统输出,体重 \(a\)是劳动强度系数 \(d(t)=-aC\) 是扰动量 进行拉普拉斯变换 \[7000(sX(s)-…

基于 LLM 的智能运维 Agent 系统设计与实现

摘要 本文详细介绍了一个基于大语言模型(LLM)的智能运维 Agent 系统的设计与实现。该系统采用多 Agent 协同的架构,通过事件驱动的方式实现了自动化运维流程。系统集成了先进的 AI 能力,能够实现故障自动诊断、预测性维护、知识沉淀等核心功能。 一、运维 Agent 架构设计 在设…

RCE_sample_ctf_questions(ing)

[广东强网杯 2021 团队组]love_Pokemon 考点:函数escapeshellarg/escapeshellcmd绕过正则匹配 文件查看指令+通配符绕过正则匹配点击查看代码<?php error_reporting(0); highlight_file(__FILE__); $dir = sandbox/ . md5($_SERVER[REMOTE_ADDR]) . /;if(!file_exists($di…

C# 注册Windows服务

环境:.NET Farmework 4.7.2 IDE:Visual Studio 2022 添加程序集引用: System.ServiceProcess System.Configuration.Install 右键项目,添加UpdateServices1类,让UpdateServices1继承ServiceBase(UpdateServices1换成自己的Services服务)编译过后如果需要更新服务代码,要…