蓝桥杯算法 C++基础

namespace命名空间


防止命名有冲突,c++多了namespace,通过::运算符

计算机1904班::芜湖

网安1904班::芜湖

first::a = 2
second::a = 6.453

同样为芜湖,但是命名空间不一样,可以同样起一个名字并且不冲突。

标准输入输出流

用《和》来输入和输出

cout表示输出流的对象,cin表示输入流对象(键盘)

标准库中的名字都属于标准空间std

#include #include using std::cout; //使用单个名字
int main(){
	double a;
	cout<<"Please enter a number:"<>a; //通过“名字限定”std:cin, cin是代表键盘的输入流对象,>>等待键盘输入一个实数
	
	a = sin(a);
	cout<

上述写法略显麻烦 因此可以直接引用std的namespace 

::其实有点类似于Java中引用类对象中的“ . ” 

#include #include using namespace std;//引入整个名字空间std中的所有名字
					//std cin属于名字空间std中;
int main(){
	double a;
	cout<<"Please enter a number:"<>a;
	a=sin(a);
	cout<

输出格式也与c语言略有不同,<<可以代替加号的用法。

#include #include using namespace std;//引入整个名字空间std中的所有名字
					//std cin属于名字空间std中;
int main(){
	int a;
	int b;
	cout<<"Please enter two number:"<>a>>b;
	cout<< "The bigger number is "<<(a>b?a:b)< 

变量及其作用域

{}的局部作用 

#include #include using namespace std;
int main(){
	double a;
	cout<<"Type a number: ";
	cin>>a;
	{
		int a = 1;
		a = a*10 +4;
		cout<<"Local number:"<

在第二个{}中的a是不受外边控制的,很容易理解。

::有可强制使用全局变量作用

#include #include using namespace std;
double a= 128;
int main(){
	double a=328;
	cout<<"Local num "<

运行结果是 

Local num 328
Exact num 128
--------------------------------

C++多了一个 引用类型 &

简单说 这个&类型可以使得别的变量引用这个变量的地址 达成同时修改数的作用

#include #include using namespace std;
int main(){
	double a=328;
	double &b = a;
	b=128;
	cout<<"A num is "<

相当于引用a的值并且可以改a的值。

那么这个引用到底有什么用呢

其实就是在函数中作为形参,形参和实参是同一个对象,在函数中对形参的修改其实就是对实参的修改。

&表示在这个函数里面对变量的操作原封不动的还给原函数里的这个变量

这是c++比c语言方便的地方,当c语言需要用指针来传递变量时,c++可以直接使用引用来传递,避免了复杂的解引用的取地址。

#include #include using namespace std;
void swap(int &x,int &y){
	cout<<"交换前的a与b的值是"< 

优点:当实参内存较大时,使用引用代替传值可以提高效率。

C++中的捕获异常

try catch的使用

 简而言之,在try中找到错误,在catch中捕获相应类型的错误,实现其中catch的内容。

C++的函数

c++中可以给形参默认参数,但是必须得在右边

函数重载

类似JAVA,根据形参类型区分

模板函数template

#include #include #include using namespace std;
templateTT minValue(TT a,TT b){
	if(a 

使用模版函数可以使得函数类型不用固定,但是对于类型不同的两个参数呢?

当a与b类型不同的时候,会报错,因此在形参中可以更改为T1和T2

C++中的动态内存分配new和delete

#include using namespace std;
int main(){
	double d = 3.14;
	double *dp; //创建一个double类型的指针 
	
	dp = &d; // 让指针指向d地址 
	*dp = 4.14; //解引用dp 改变d的值 
	cout<<"*dp = "<<*dp<<" d= "<>*dp;
	cout<<"*dp = "<<*dp<<" d= "<>*dp;
	cout<<"*dp= "<<*dp<#include #include #include #include using namespace std;
struct Date{
	int d,m,y;
	void init(int dd,int mm,int yy){
		d=dd; m = mm;y = yy; 
	} 
	void print(){
		cout< 

 可以用c语言的struct定义

自引用&
struct Data{
	int d,m,y;
	void init(int dd,int mm,int yy){
		d=dd; m = mm;y = yy; 
	} 
	void print(){
		cout< 
day.add(3).add(7); 

add函数可以返回一个类的对象,相当于返回给你一个类,然后可以继续调用函数。

函数重载运算符
Data& operator+=(int dd){
	
	d= d+dd;
	return *this;
}

可以对+=进行重载,变成自己想要的公式

main函数中的+=引用

day+=3;
构造函数
Data(){
		
	}
	Data(int dd,int mm,int yy){
		d=dd;m=mm;y=yy; 
	} 

类似Java,没啥好说的

当用类的时候,不用struct,使用class的话,需要在成员方法前添加public:

class Data{
	int d,m,y;
public:	void init(int dd,int mm,int yy){
		d=dd; m = mm;y = yy; 
	} 
public:	void print(){
		cout< 

 不加public默认private

String类

string类的初始化
#include #include using namespace std;
typedef string String;
int main(){
	string s1;//默认构造函数 
	String s2("hello");//普通构造函数 
	s1 = "Anatoliy";//赋值运算符 
	String s3(s1);//拷贝构造函数 string s3=s1 
	
	cout<<"s1  is: "< 

string函数迭代器的使用