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


前言

放了寒假了,也不能去外边玩,游戏也玩的没意思了。只能窝在家好好学习了哈哈。
之前做数据结构题的时候,有好多都不会,然后就去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将s写到输出流os中,返回os
is<<s从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is,s)从is中读取一行赋给s,返回is
s.empty()判断为空返回true,不为空返回false
s.size()返回s中字符的个数
s[n]s中第n个字符,n从0开始
s1+s2s1和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

(3)vector的其他操作

这些操作基本上和string的一些操作差不多

操作作用
v.empty()如果v不含有任何元素,返回真;反之,则假
v.size()v中元素的个数
v[n]返回v中第n个位置上元素的引用
v1=v2用v2中元素的拷贝替换v1中的元素
v1={a,b,c…}用列表中元素的拷贝替换v1中的元素
v1==v2v1和v2相等当且仅当它们的元素数量相同且对应位置的元素值都相同
<,<=,>,>=以字典顺序进行比较

vector注意!!!

	vector的下标类型和string的一样,都是 size_type 类型。
	不能用下表形式添加元素

举个栗子
比如向vector对象中添加10个元素

vector<int> v;		//空vector对象
for(decltype ( v.size() ) i=0;i!=10;i++)
    v[i]=i;
for(decltype ( v.size() ) i=0;i!=10;i++)
    v.push_back(i);

在这里边,第一个for循环是错误的,v是一个空vector,不包含任何元素,所以也就不存在可以通过下标去访问元素。
要想添加元素,就目前而言,只能用push_back(t),向尾端添加元素。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值