C to C++ 基础语法
Why C++
经过大一一整年的学习,相信各位的C语言都有了扎实的基础——。
但是咱们课程不讲C++,但是咱的算法题很多用C++会变得更方便,所以还得会。
于是笨人最近在学习C++,故写进博客。
先来看一段简单的代码
1 |
|
嗯,很显然这是一个输入n,然后输出Hello World再输出n的程序
我们先来看第1行#include<iostream>
其实就是跟C语言一样导入库,只不过导入的不是<stdio.h>库了,<iostream>可以认为是一个输入输出流的库。
接下来再康第三行
1 | using namespace std; |
的意思是 使用 命名空间 std。
这地方要说可能要说挺多。结论是:现在做算法题和小程序建议加上这一句,解释不想看的可以快进(嗯嗯。
下面是解释
命名空间?
命名空间是什么
在C++中,命名空间(namespace)是一种用来防止名字冲突的机制。
如:
1 | int count = 10; |
如果写了很多个库,每个库里都有一个count变量,那编译器就不知道该用哪个了。
于是为了解决这种问题,C++把不同库里的名字放进不同的命名空间里。
如
1 | namespace A{ |
通过这样,就可以在使用时,区分两个count,如
1 | A::count += 1; |
就把两个命名空间里的count区分开了。
std命名空间
C++ 标准库里的所有东西(比如 cout, cin, string, vector 等等)
都被放进了一个叫 std(standard) 的命名空间里。
所以严格写法是
1 |
|
这里的std:: 表示从命名空间std里找cin,cout,endl
using namespace std;的作用
这条语句的意思是:从现在开始,使用命名空间std里的所有名字时,不需要加前缀std::
起到了一个省略的作用
于是就变成了最上面的那个代码的样子
有时不建议使用它
using namespace std的写法,在小程序里非常方便。
但如果在大型项目和库开发中,就可能引发命名冲突。
如自己写了一个
1 | void sort(){/* ... */} |
但标准库里也有一个std::sort()
所以,如果用了using namespace std;,编译器就可能混淆这两个函数。
所以最安全的做法就是不用这个语句,干脆把所有的std::前缀都加上。
cin, cout
就是C++的输入和输出函数,在一定条件下可以代替scanf,printf函数(不过效率赶不上)。
使用cin的时候就不用加取地址符&了
注意两个函数使用时的箭头方向>> <<
若有多个输入和输出的元素,可以用多个箭头链接,如
1 | cin >> a >> b >> c; |
endl
end of line的简写,用来代替换行。
当然也可以用\n替代
bool
再来看一个简单的代码
1 |
|
输出的结果为1 1 0
bool只有两个取值,true和flase
任何非0的值,都会被转成true,只有0会被转成flase。
提示:bool虽然只有0和1两个值,可以用二进制的1位表示,但是bool变量实际是占1个字节(8位)。
为什么?
因为:
计算机的最小可寻址单位是字节(byte)。
CPU 不能直接寻址“半个字节”或“1 bit”的内存单元,
所以即使只有一个布尔值,也得分配整整 1 个字节。
string类
字符串的定义
1 | string s1 = "hello"; |
so easy~
字符串的更改
和C语言一样,可以通过使用
1 | s[0] = 'H'; |
这种方式更改
字符串的拼接
1 | s3 = s1 + s2; |
直接用’+’就可以链接字符串了,so easy~。
字符串的输入
这里可以用C语言类比一下。
使用
1 | cin >> s |
就可以把输入字符串了,其中cin会在读取到空格、回车时停止,和scanf相同。
那当然还有输入一行的了~
1 | getline(cin, s); |
这里的cin是指从标准输入流(键盘)中读入字符串,存到字符串s里。
字符串的输出
1 | cout << s; |
so easy~
字符串的长度
所求字符串s的长度,这个跟C语言有些不同
使用
1 | int len = s.length(); |
即可把字符串s的长度存到len中
为什么要这么写而不是像strlen(s)一样,把字符串放到函数里呢?
让我们回看这一节的标题,字符串类,没错他是一个类。那么学过java的都知道了,类是有属性和方法的,这里的length()就是一个方法,返回这个字符串的长度。
字符串的复制
可以直接用 = 来赋值,如
1 | s1 = 'hello world'; |
字符串其他常用函数
s.empty()
判断s是否为空,空返回1,否则返回0。
s.front()
返回s第一个字符
s.back()
返回s最后一个字符
s += t / s.append(t)
拼接字符串
s.push_back(c)
添加单个字符到末尾
s.pop_back()
删除末尾字符
s.clear()
清空字符串
s.find(t)
在字符串s里找字符串t首次出现位置
s.substr(pos, len)
获取s中pos处,长度为len的字符串
s.substr(pos)
如果只输入一个值的话,就是获取从pos处到字符串s末尾的子串
s.compare(t)
把s和t比较,等同于strcmp(s, t)等同于
s1 == s2
判断两个字符串是否相等,若相等返回true,否则false。
不常用但有时会用的函数
s.insert(pos, t)
在指定位置插入字符串
s.erase(pos, len)
删除子串
s.replace(pos, len, t)
替换子串
s.swap(t)
交换两个字符串
结构体
C++的结构体使用和C有些不同
看这个例子
1 | struct stu{ |
比如我们要生成一个stu的数组,在C中我们需要写
1 | struct stu a[10]; |
而在C++中,我们只需要写
1 | stu a[10]; |
看出不同来了吧~,也就是说在这里我们不需要使用typedef了~
&的使用
看下面这个例子
1 |
|
通过这种方法,可以直接实现a += 1,即输出3
int &a 表示 引用,也就是,别名
当你传入 a 时,函数内部的 a ,实际上就是 main 中的 a
对它的修改会直接影响原变量
也就是直接把形参变成了实参~。
C++的基础语法就到这里啦~
下期来学STL~。
- Title: C to C++ 基础语法
- Author: Connor
- Created at : 2025-10-14 13:13:28
- Updated at : 2025-10-22 16:25:31
- Link: https://redefine.ohevan.com/2025/10/14/CtoC++1/
- License: This work is licensed under CC BY-NC-SA 4.0.