C到C++基础
1.new和delete
(1)new的作用类似于C语言中malloc的申请内存,delete等价于C语言free.
如:
int *p = new int; //申请一个内存
*p = 100;
printf("%d\n",*p);
delete p; //释放一个内存
(2)用new申请一个内存时,可以初始化,多个内存不可以.
如:
int *p = new int(10);
printf("%d\n",*p);
delete p;
(3)内存申请失败的时候会报错的.
(4)在定义一个结构体时,结构体变量初始化要用{}:
如:
typedef struct node{
int x;
int y;
}
node *p = new node({10,20}); //这里小括号可以省略
printf("%d\t%d\t",p->x,p->y);
delete p;
(5)申请连续多个内存和释放连续内存:
如:
int *p = new int[10]; //申请10个int类型大小的空间
for(int i = 0; i < 10; i++)
{
p[i] = i + 1;
}
for(int i = 0; i < 10 ; i++)
{
printf("%d\t", p[i]);
}
delete[] p; //释放连续内存
2.cin和cout
1>cout和endl
(1)使用cin和cout需要新的头文件,同时打开命令空间std(cout和endl和std的).
#include <iostream>
using namespace std;
int main()
{
cout<<"一段文字"<<endl;
return 0;
}
(2)::是作用域运算符,说明说明 的 说明,如cout和endl是来自命名空间std的,那么可以这样用
std::cout << "一段文字" << std::endl;
(3)输出多个变量,用<<左移运算符隔开:
cout<<"abc"<<"\t"<< "def"<<endl;
2>cin
(1)使用右移运算符来对变量进行赋值,不需要&符号或者格式符:
cin >> a >> s;
在控制台输入时,有多个变量用空格隔开就行.
3.命名空间
1.作用:用来组织和重用代码的一个编译单元,类似于一个作用域.在多人协作开发的时候,同名是不可控的,尤其对于库同名更加严重,为了解决这个同名的问题,通过命名空间来避免冲突.
可以把命名空间理解成一个打包好的工具箱.
2.命名空间的名字遵循标识符命名规范,通常以开发者名字或团队名字来进行命名.
如:
namespace YADONG
{
}
3.在命名空间内部,一般不会写变量(可以但没必要),一般写函数,
namespace YADONG
{
void fun()
{
printf("这是一个函数\n");
}
}
4.命名空间内的成员对外不开放,要调用命名空间内的成员,要用"::"符号指定命名空间:
如:
int main()
{
YADONG::fun();
}
或通过using namespace 命名空间名来打开命名空间,让命名空间里面的所有成员对外开放,适用于空间里面的大部分成员对外需要被经常使用:
如:
namespace YADONG
{
void fun()
{
printf("这是一个函数\n");
}
}
using namespace YADONG;
int main()
{
fun();
}
5.指定开放命名空间内的成员 : using 命名空间名::成员名 , 成员是函数时不需要加 “()” , 如 :
using YADONG:fun;
int main()
{
fun(); //可直接使用了.
}
6.命名空间取别名,如 :
namespace 别名 = YADONG:
别名::fun();
4.string的基本使用
1.要用string先要包含头文件和命名空间std:
#include <string>
using namespace std;
2.string用来存字符串的,它是一个类类型,自带一些函数方法功能,如length()方法可以获取字符串的长度,也可以直接用"=="来判断两个字符串是否相等,还可以直接遍历,如下:
string str1 = "asdasfvavsarw";
string str2 = "asdasfvavsarw"
cout<<str1.length()<<endl; //得到字符串长度
if(str1 == str2) //判断字符串是否相等
cout << "相等" << endl;
else
cout<<"不想等"<< endl;
for(auto i : str) //遍历字符串中的字符,auto字段判断字符串中的类型,同时这种方式只能用来遍历字符串,不能修改,如不能 i = 'S';
{
cout << i;
}
//如果要在遍历的时候修改,可以用&引用字符:
for(auto& i: str1)
{
i = 'S'
}
//这样字符串就变成了"SSSSSSSSSSSS"
3.string可以像数组一样获取下标字符:
string str1 = "avsavsa";
cout << str1[3] << endl; //获取下标为3的字符