当前位置: 首页 > news >正文

hyx_蓝桥杯C++学习_系列一

hyx_蓝桥杯C++学习_系列一

C++语法基础

C++的语法与C语言在很多地方并无差异,本篇主要是对C++中一些独有的语法进行整理,是学习本专栏的入门和必读文章。

基本结构

对比C语言中的一堆include,C++似乎显得更加简洁,我们可以使用#include<bits/stdc++.h>这个万能头文件,省去不少书写代码的麻烦。

但是区别于C语言,C++在#include<bits/stdc++.h>之后一般会加上using namespace std;

这句语句的意思是将标准命名空间std中的所有名称引入到当前作用域中。

如果没有这句语句,一个简单的Hello, World!的代码需要这么写,我们发现cout,endl等函数均需要加上std::

#include <bits/stdc++.h>
int main() {std::cout << "Hello, World!" << std::endl;std::string myString = "Hello";return 0;
}

而在使用了之后,程序就变成了:

#include <bits/stdc++.h>
using namespace std;
int main() {cout << "Hello, World!" << endl;string myString = "Hello";return 0;
}

这十分有效的简化了代码的书写。

但是有以下建议:

  • 在小型程序或学习时可以这样用
  • 在大型项目中,建议明确写std::以避免命名冲突

输入输出

C++可以兼容scanf和printf作为输入输出的方式,同时C++还有一种特殊的流式输入输出的方式,即cin和cout。

在使用cin和cout时需要同时使用">>"(提取操作符)和"<<"(插入操作符)。

当然这里要注意,printf和scanf与cout和cin是不能混合使用的。

接下来说一下最近做题时遇到的保留小数点后几位(fixed)的写法:

cout << fixed << setprecision(n) << value << endl;

在这里n表示想保留的小数位数。

由于cin和cout需要自动判断变量类型等内部原因,读写效率比格式化的输入输出要低,尤其是在处理大量数据时,这时我们可以使用取消同步流的操作进行优化:

ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

函数

C++的函数习惯语法与C语言几乎没有差异,这里主要讲C++与C语言语法上的一些差异。

引用传递

  • 值传递:传递参数的副本,不影响原变量
  • 引用传递:传递参数的引用,会影响原变量
#include<bits/stdc++.h>
using namespace std;int func_a(int x){x = 100;return x;
}int func_b(int &y){y = 100;return y;
}int main(){int x, y;x = 50;y = 50;cout << "before: x=" << x << ", y=" << y << endl;int a = func_a(x);int b = func_b(y);cout << "return: a=" << a << ", b=" << b << endl;cout << "after: x=" << x << ", y=" << y << endl;return 0;
}

我们可以从上面这段代码来理解值传递和引用传递的区别。

输出结果:

before: x=50, y=50
return: a=100, b=100
after: x=50, y=100

我们可以发现,在调用函数后,值传递的参数x没有进行修改,内存中创建了一个x的副本a传递给函数func_a,后续输出的x依旧是原来设定的结果,而引用传递的参数y在调用函数func_b后,他的值被修改了。

函数的重载

C++允许同名函数有不同的参数列表,这称为函数的重载。

#include<bits/stdc++.h>
using namespace std;int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}int main() {cout << add(3, 4) << endl;        // 输出7cout << add(3.5, 4.5) << endl;    // 输出8.0return 0;
}

输出结果:

7
8.0