Skip to content

C++教程(cpp)

在此之前

首先要准备好编译cpp的软件(我这里使用vs studio 2022作为演示)
在下载完vs studio 2022后,打开时会弹出下载的组件,这里选择c++

开始第一个cpp程序

在vs中新建一个cpp程序需要勾选控制台项目(如下图)
图1.1 打开后会VS会自动编写基础代码(如果使用dev-cpp就不会自动构建)
基础代码如下:

cpp
#include <iostream>
using namespace std;

int main() {
    cout << "Hello World!\n";
    return 0;
}

而不同之处在于VS的代码是这样的:

cpp
#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

那么不同在哪里呢?
在vs生成的代码中非常明显的被吞掉了一行using namespace std;,而取而代之的是在输出时在cout前加了std::
但其实两者在输出没有什么不同,那为什么可以去掉这一行而不报错呢
这是因为在cpp中std::替代了using namespace std;的作用,但是它的缺点在于在之后几乎每一行代码前都要加std::,显的很麻烦,所以通常都会直接在前面加上using namespace std
现在运行一下你的第一个代码吧! 你可以看到输出结果如下图1.2

变量

在cpp中的变量格式稍微有点复杂

cpp
特殊定义 变量类型 变量名 = 变量数据;

这里的特殊定义指的是类似constunsigned
而变量类型指的是类似intfloat等 值得注意的是cpp并不需要通过导入float.h、string.h来使用对应的类型
直接使用就可以

字符串 & 字符

为啥要把他俩放在一起呢
因为经常有人会将这俩搞混
对于python转cpp的人来说,py的字符和字符串统称为字符串,也就是说在python中单引号(')与双引号(")用法是一样的
所以会出现一种情况

cpp
char a = '123abc';

其实在vs中会直接报错,但不可避免的会出现这种错误
因此要将他俩区分开
在cpp中单引号指的是字符,而string才指字符串
所以正确的是:

cpp
char a = 'a';
string b = "abc";

char类型

他有一个值得注意的点
他的值可以是一个int类型的整数,也可以是由单引号包括的字符,就比如

cpp
char a = 'a';
char b = 97;

他们两个其实是相等的,不行你可以运行

cpp
#include <iostream>
using namespace std;
int main()
{
    int a = 'a';
    if (a == 'a') {
        cout << '1';
    }
    else {
        cout << '0';
    }
}

来验证一下,程序输出1说明他们相等,相反输出0说明是不相等的
在一些编译器中,你输入一个字符串但变量类型是char,会自动选取字符串中的第一个字符存放并不会报错

string类型

string指的是字符串,顾名思义,是由一个个字符串成的
而他还有另一种方法char[] = string这两种是相同的使用方法,而char[]指的是后面的数组
他可以存放许多字符在一个变量中

输出与输入

在c++中,输出使用的是cout,输入用的是cin

cout

简单来记就是
  c   +    out = cout
 C++      输出
它的使用方法是cout << 1 << '2' << "abc" << a << endl; 让我们分解一下:

  1. cout: 语句根本、表输出
  2. <<: 输出运算符,用于cout,有相反的符号>>
  3. 1、'2'、"abc"、a: 指整数类型、字符类型、字符串类型与变量,所以cout可以使不同类型的值或变量在一行连接,同类型可以使用'+'连接,不同类型用'<<'连接
  4. endl: 换行符,可以出现在内容的任意一个位置进行换行,你甚至可以这么写cout << endl << 1 << endl;
  5. ;:无论如何,除了一些特定的函数或花括号的前后不需要分号外,分号在每行中是必须存在的

cin

简单来记就是
  c   +     in = cout
 C++      输入
它的使用方法是cin >> a >> b; 分解开来就是:

  1. cin: 语句根本、表输入
  2. >>: 输入运算符,用于cin,有相反的符号<<
  3. a、b: 表达输入后存储在这个变量内,输入内容会转为这两个变量所对应的类型

数组 & 栈

目前有两种数组,分别是静态数组和动态数组

静态数组

就是规定好数组大小且不能更改数组大小的数组
使用char a[10]来定义一个大小为10的字符数组(就是上面提到的string),同理,创建一个大小为四的整型数组就是int a[4],其中a为变量名,即格式为

cpp
数据类型 变量名称[数组大小] = 数组

在格式中的数组与等号可以不写,但是大小始终不变,数组中大括号在左右,数据与数据用逗号隔开,如:int a[10] = [1,2,3,4,5,6,7,8,9,10];

动态数组

在使用动态数组前,要导入一个库<vector> 使用#include <vector>函数导入这个库,但想使用动态数组的话是不是与静态数组的char a[vector]一样呢?
并不是,要想使用vector动态数组,它的使用方法是这样的:

cpp
vector<类型> 变量名 = {1,2,3};

当然,两者的相同点是都可以直接在定义时直接赋值
既然是动态数组,那么如何更改数组内的数据呢?

添加元素

首先就是常用的添加元素,我们使用vector.push_back来存入,下面是一个存入的示例:

cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> a = {1,2,3,4,5};
    a.push_back(6);
    for (int i = 0;i < a.size;i++) {
        cout << a[i] << ',';
    }
}

返回结果:

1,2,3,4,5

在这里,vector.push_back的作用是在a数组的末尾添加一个整数6 而a.size的作用是获取目前a数组的大小,在添加6之后,a目前的大小为6个整数,所以a.size的返回值为6,在for循环的条件中,索引是从0开始,这样for循环中i的值的变化过程就是

i = 0
i = 1
i = 2
i = 3
i = 4
i = 5

从而获取动态数组中的每个值
要注意的是vector.push_back()只能够在数组的末尾处添加元素

移除元素

要想移除元素,要使用到vector.pop_back函数
示例如下

cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> a = {1,2,3,4,5};
    a.pop_back();
    for (int i = 0;i < a.size;i++) {
        cout << a[i] << ',';
    }
}

返回结果:

1,2,3,4

很明显的发现,代码将a的最后一位移除了
没错,pop_backpush_back类似,两者都是只能在数组的末端进行操作
他们和接下来要讲的栈非常相似

栈是什么?

栈(Stack)是一种基本的数据结构,它按照特定的顺序进行插入和删除操作,这种顺序被称作“后进先出”(Last In First Out, LIFO)。这意味着最后进入栈的元素将会是第一个被删除的元素。 以下是栈的一些主要特点和操作:

特点

  • 后进先出(LIFO):最后压入(push)栈的元素将会是最先弹出(pop)的。
  • 单一操作端:只能在栈顶进行操作,通常在栈的末端。

因此可以把动态数组看成一个栈,它只能操作最后一个数据 举个例子
我们现在有一个栈,里面现在有五个元素

1,2,3,4,5

压入6,7

1,2,3,4,5 <== 6
1,2,3,4,5,6 <== 7
1,2,3,4,5,6,7

移除7

1,2,3,4,5,6,7 ==> 7
1,2,3,4,5,6

全部弹出

1,2,3,4,5,6 ==> 6
1,2,3,4,5 ==> 5
1,2,3,4 ==> 4
1,2,3 ==> 3
1,2 ==> 2
1 ==> 1
None

以上就是栈的出入顺序,恭喜你,基本了解栈了