初始时间:大一(上) 12月
更新时间:大一(上) 12月
简介:之前我写过一篇博客(萌新笔记)C++与C的不同,本来我想接着这个系列继续写下去,但是我发现越到后面C和C++的区别越显著,所以我就打算单独出一个系列的C++的复习笔记,但如果碰到与C语言相关的知识点我也会写出来
start!☆(๑>ڡ<)☆
一、大杂烩(这里的笔记都是混杂的
1、C语言学指针的时候我们将未初始化的指针变量指向空指针NULL,而C++表示空指针有三种方式(三种方式都是等价的)
int *p = NULL;
int *p = 0;
int *p = nullptr;
2、初始化变量(以int为例介绍四种方法)
int temp = 0;
int temp = {0};
int temp{0};
int temp(0);
补充:在C++11的标准中,用花括号来初始化变量仅在某些受限场合才能使用,这就涉及到列表初始化(挖个坑,以后学到了在补充)
3、在C++11标准中,int a[5] = {} 和 int a[5] {} 都代表数组初始化为0
4、C++的布尔类型(_Bool)为 true 和 false,python的布尔类型(bool)为 True 和 False
二、标准库类型 string
前提要示:C++的 string类 和 C语言的<string.h>半点关系也没有,标准库类型 string 表示可变长的字符串,而<string.h>是旧C 的头文件,对应的是基于char*的字符串处理函数,所以 string类 并非<string.h>的“升级版本”,他们是毫无关系的两个头文件,而C++的< cstring >才是对应于旧C <string.h>的std 版本 详细说明点击此
1、初始化 string 对象
常用方式
string val; //默认初始化,val是空字符
string val2 = val; //val2也是空字符
string val3 = "well"; //val3的内容与该字面值一样
string val4(5,'c') //内容是"ccccc"
特殊用法
string val3 = "well";
string val6(val3); //val3的内容是"well"
string val7("well"); //val7的内容也是"well"
顺便一提
string val3 = "well";
val3 = "Allright"; //当声明完 string类后要改定义的话可以直接改
2、打印 string 对象
One、普通打印
string val = " Hello World "
cout<< val <<endl;
output:Hello
原因:在打印操作时, string 对象会自动跳过开头的空白(包括空格符、换行符、 Tab键等)并从第一个字符读起,直到遇到下一处空白为止
Two、使用getline读取一整行
string line;
while (getline(cin,line))//每次读一整行直到文件末尾
cout<< line << endl;
return 0;
解析:用getline的好处是遇到空白不会停止,直到换行符才停止读取,并且得到的line实际上是不包含换行符的
3、string::size_type类型
size()函数返回是string::size_type类型的值,string::size_type它是一个无符号类型的值,而且能够存放下任何string对象的大小。另外,string类型的索引也是一个size_type类型的(如:下标运算符 [ ] 索引的就是string::size_type类型)
还有:虽然书上说不要把string::size_type类型和unsigned型与int型混杂,但我觉得还是可以把string::size_type类型简单的理解为:无穷大的unsigned型
4、比较 string 对象(雾
标题是什么意思呢?雾就是误,即误导的意思,其实我真正想表达的是:在C\C++中比较两个字符串或string对象是否相等
先建议大家看一下c\c++中比较两个字符串或string对象是否相等(一定要看哦!)
然后我针对这篇文章做个概述:
One、如果要比较的对象是char*字符串,且用 “==” 符号比较,那么比较的是两个字符串的地址是否相等(相等是1,不等是0)
Two、如果要比较的对象是char*字符串,且利用strcmp()函数比较,那么比较的是两个字符串的ASCII码(相等是0,不等是1)
Three、 如果要比较的对象是两个string,且利用compare()函数比较,那么比较的是两个字符串的ASCII码(相等是1,不等是0)
Four、 如果要比较的对象是两个string,且用 “==” 符号比较,那么比较的是两个字符串的ASCII码(相等是0,不等是1)
5、string 对象相加
可以两个 string对象 相加,也可以把 string对象 和字符串字面值混加,但对于第二种情况有个前提:必须确保每个加分运算符(+)的两侧的运算对象至少有一个是 string
举例
string val1 = "123";
string val2 = "456";
string val3 = val1 + "789" + val2 //正确
string val4 = "789" + val1 + "789" //错误
string val5 = (val1 + "789") + "789" //正确,因为括号内相加后是string
6、基于范围的for语句
举例
int main()
{
string str("some");
for (auto c : str)//每行输出str的一个字符
cout << c << endl;
return 0;
}
output:s
o
m
e