C++学习笔记,坚持自律!

C++学习笔记

  • 前言
  • 一、变量和基本类型
    • 1.处理类型
      • (1)auto类型说明符
      • (2)decltype类型指示符
  • 二、字符串、向量和数组
    • 1.String
      • (1)初始化
      • (2)string对象上的操作
        • ①使用getline读取一整行
        • ②处理string对象中的字符
    • 2.vector
      • (1)初始化
      • (2)向vector中添加元素


前言

放了寒假了,也不能去外边玩,游戏也玩的没意思了。只能窝在家好好学习了哈哈。
之前做数据结构题的时候,有好多都不会,然后就去CSDN上找那些大佬们做的,其中好多都是C++的,感觉C++好像很厉害,于是就买了一本C++的书,叫《c++ Primer》的书,第五版的,准备自学!!!
做这个笔记也无非就是想督促一下自己,希望能坚持下去吧!!
以下好多笔记都是源自于书上,若有侵权,立马删除!!!


提示:笔记主要还是挑一些重点的来看吧,基本上是那些不用于C的。
如果大佬们还有自己认为重要的知识点,欢迎来补充~~~
感谢!!!

一、变量和基本类型

1.处理类型

(1)auto类型说明符

auto是让编译器自己去分析表达式所属的类型
它会忽略顶层const,如果希望是顶层的,则需声明出来

int i=1;
const int ci=i, &cr=ci;
auto b=ci;		//b是一个整数,ci的顶层const被忽略掉了
auto c=cr;		//c是一个整数,同上
auto d=&i;		//d是一个整型指针
auto e=&ci		//e是一个指向整数常量的指针,底层const
    
const auto f=ci;		//ci的推演类型是int,f是const int

(2)decltype类型指示符

选择并返回操作数的数据类型
decltype((variable))的结果永远是 引用
decltype(variable)的结果只有当variable本身就是一个引用时才是引用

decltype(f())	sum=x;	//sum的类型就是函数f的返回类型

decltype((i)) d;		//错误:d是int&,必须初始化
decltype(i)  d;			//正确:e是一个(为初始化的)int

二、字符串、向量和数组

using:头文件不应包含using

1.String

(1)初始化

string s1;			//默认初始化,s1是一个空字符串
string s2(s1);		//s2是s1的副本
string s2=s1;		//同上
string s3("value");	//s3是字面值"value"的副本,除了字面值最后的那个空字符外
string s(n,'c');	//把s初始化为由连续n个字符c组成的字符

(2)string对象上的操作

操作 作用
os< 将s写到输出流os中,返回os
is< 从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is,s) 从is中读取一行赋给s,返回is
s.empty() 判断为空返回true,不为空返回false
s.size() 返回s中字符的个数
s[n] s中第n个字符,n从0开始
s1+s2 s1和s2连接
s1=s2 赋值
s1==s2 判断
s1!=s2 对大小写敏感
<,<=,>,>= 利用字符在字典中的顺序进行比较,对大小写敏感

①使用getline读取一整行

如果直接用 cin 输入的话,他会从第一个非空白符开始读取,直到遇见下一处空白为止。
若想要那被忽略掉的空白符,那么就会用到getline语句。
代码如下(示例):

string line;
//每次读取一行,直到文件末尾?
while (getline(cin,line))
	cout << line << endl;	//line中不包含换行符,需要手动添加

②处理string对象中的字符

此处用到了头文件 cctype

操作 作用
isalnum( c ) 当c是字母或数字时为真
isalpha( c ) 当c是字母时为真
iscntrl( c ) 当c是控制字符时为真
isdigit( c ) 当c是数字字符时为真
isgraph( c ) 当c不是空格但可打印时为真
islower( c ) 当c是小写字母时为真
isprint( c ) 当c是可打印字符时为真
ispunct( c ) 当c是标点符号时为真
isspace( c ) 当c是空白时为真(空格、制表符、回车、换行、进纸符)
isupper( c ) 当c是大写字母时为真
isxdigit( c ) 当c是十六进制时为真
tolower( c ) 如果c是大写字母,则输出小写字母,否则原样输出
toupper( c ) 与上相反

要想处理string中的一部分字符
一种是可以像C那样使用下标;
还有一种是使用迭代器(??)

//处理每个字符,用基于范围的for语句
string str("some string");
//每行输出str中的一个字符
for(auto c:str)
    cout << c << endl;

2.vector

学完vector之后,第一印象是感觉这个有点像数据结构里边讲的栈,但它比栈灵活多了

(1)初始化

1、引用不可以成为vector的元素,因为他不是对象
2、可以用花括号初始化每一个值
3、可以用括号指定元素个数或相同的元素值
4、只能使用直接初始化,不可以使用拷贝初始化(只有在类型相同的时候才可以拷 贝)
5、适用于三种情况:①初始值已知且数量较少
                   ②初始值是另一个vector对象的副本
                   ③所有元素的初始值都一样

(2)向vector中添加元素

举个书上的例子

vector<int> v;		//空vector对象
for(int i=0;i!=100;++i)
	v.push_back(i);	//依次把整数值放到v的尾端,相当于栈的后入
//循环结束后v有100个元素,从0到99

你可能感兴趣的:(c++)