c++学习总结(前四周)

1.c++新增内容
a.constexpr类型如果认定某个对象是常量表达式,可以把它声明为constexpr类型由编译器验证对象的值是否是常量表达式,通过这种方法可以获得编译时常量声明为constexpr的数据对象一定是一个常量,必须用常量表达式初始化constexpr与const在大多数情况下使用方式相同。
b.auto类型说明符编译器自动检测数据类型,在声明变量但又不是很清楚具体数据类型时使用auto说明。在使用时要初始化变量,编译器以初始化表达式来推测数据类型。
c.decltype 编译器依据表达式推断出要定义的数据类型,并且不需要初始化。auto和decltype可以让我们不用去记忆和书写复杂的类型名字d.range-for语句
for( declaration :expression )
statement;
expression是要处理的序列初始值列表、数组、vector或string等类型的对象declaration定义一个变量,表示序列中的每个元素statement是一条语句或语句块,表示对元素的处理代码
2.指针
存放目标对象地址的特殊变量,在上学期C语言中已经学习过关于指针的内容,c++对其稍做补充。如果把存储空间看作是一个接一个的抽屉,那么指针就是专门存放钥匙的抽屉,所以说指针本身也有地址,可以有指向指针的指针变量。另外指针可以进行自增自减运算,但是只有指向数组时自增自减运算才具有意义。不指向任何一个地址的指针叫做空指针,可用null或nullptr初始化。 3.new和delete在堆上动态分配空间,创建对象并返回地址。存放在指针数组中。delete则是清楚堆内元素。
4.左值引用赋予变量别名,并与变量一次性绑定,不可更改。引用之间的赋值是他们绑定的对象之间的赋值,引用关系本身不发生改变。声明方式:类型 & 引用名 = 初始值;
5.右值引用一般用于移动操作(不是很懂)
声明方式:类型 &&右值引用变量 = 右值表达式 ;
6.const限定指针
a.指向const对象的指针(非const )
const type cp; 或者type const cp;
cp是指向常量的指针,它所指向的内存中的内容不可以改变,即
cp的值不能改变
b.指向非const对象的const指针
type
const cp = 地址值;
cp是常量指针,初始化后值不能改变,指向固定的单元
c.指向const对象的const指针
const type* const cp = 地址值;
7.volatile限定词关键字
volatile限定的对象不能被编译器例行优化
当一个对象的值可能在编译器的控制或检测之外被改变时,可以将对象声明为volatile
例如被系统时钟更新的对象
8.结构体
把一组来自不同类型的数据组合在一起构成复合类型,其中的每个数据都是结构体的成员。
结构体由关键字struct定义,语法形式:
struct 结构体类型名{
成员数据类型 成员名 ;
};
结构体的成员不能独立使用,必须由结构体类型的变量通过成员选择运算符“.”来选择,或者由结构体类型的指针通过“->”运算符选择。例如 a.student 就是使用student中的a成员。
在结构体中可以含有各种数据类型,当结构体中包含成员函数时,结构体就是类。
9.枚举
枚举类型定义了一组命名的整数常量,以提高代码的可读性
enum TrafficLight { red, green, yellow };
编译器会自动赋给未指定值的枚举成员相邻的下一个整数值。枚举成员不能进行迭代。
10.stringc++新增的数据类型,比字符数组更加好用。声明方式 string 变量名 ;具体操作:s[i] // 直接以下标方式访问容器中的元素
s.front() // 返回首元素
s.back() // 返回尾元素
s.push_back(x) // 向表尾插入元素x
s.size() // 返回表长
s.empty() // 表为空时,返回真,否则返回假
s.pop_back() // 删除表尾元素
s.begin() // 返回指向首元素的随机存取迭代器
s.end() // 返回指向尾元素的下一个位置的随机存取迭代器
s.insert(it, val) // 向迭代器it指向的元素前插入新元素val
s.insert(it, n, val)// 向迭代器it指向的元素前插入n个新元素val
s.insert(it, first, last)
// 将由迭代器first和last所指定的序列[first, last)插入到迭代器it指向的元素前面
s.erase(it) // 删除由迭代器it所指向的元素
s.erase(first, last)// 删除由迭代器first和last所指定的序列[first, last)
s.reserve(n) // 预分配缓冲空间,使存储空间至少可容纳n个元素
s.resize(n) // 改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间
s.resize(n, val) // 改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),val将填满扩展出的空间
s.clear() // 删除容器中的所有元素
s.swap(v) // 将s与另一个vector对象进行交换
s.assign(first, last)
// 将序列替换成由迭代器first和last所指定的序列[first, last),[first, last)不能是原序列中的一部分
11.vector
动态数组,长度可变。需要引入头文件vector,声明方式 基本数据类型 动态数组名
基本操作
s[i] // 直接以下标方式访问容器中的元素
s.front() // 返回首元素
s.back() // 返回尾元素
s.push_back(x) // 向表尾插入元素x
s.size() // 返回表长
s.empty() // 表为空时,返回真,否则返回假
s.pop_back() // 删除表尾元素
s.begin() // 返回指向首元素的随机存取迭代器
s.end() // 返回指向尾元素的下一个位置的随机存取迭代器
s.insert(it, val) // 向迭代器it指向的元素前插入新元素val
s.insert(it, n, val)// 向迭代器it指向的元素前插入n个新元素val
s.insert(it, first, last)
// 将由迭代器first和last所指定的序列[first, last)插入到迭代器it指向的元素前面
s.erase(it) // 删除由迭代器it所指向的元素
s.erase(first, last)// 删除由迭代器first和last所指定的序列[first, last)
s.reserve(n) // 预分配缓冲空间,使存储空间至少可容纳n个元素
s.resize(n) // 改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间
s.resize(n, val) // 改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),val将填满扩展出的空间
s.clear() // 删除容器中的所有元素
s.swap(v) // 将s与另一个vector对象进行交换
s.assign(first, last)
// 将序列替换成由迭代器first和last所指定的序列[first, last),[first, last)不能是原序列中的一部分
12.迭代器
a.正向遍历举例
vector::const_iterator it = v.begin();
while(it != v.end())
{
cout<<*it<<" “;
it++;
}
cout<<endl;
b.反向遍历举例
vector::const_reverse_iterator it = v.rbegin();
while(it != v.rend())
{
cout<<*it<<” ";
it++;
}
cout<<endl;
13.文件读写
a.输入输出重定向
c:>program < inputfile >outputfile
运行名为program.exe的可执行程序,用文件inputfile作为输入,用文件outputfile作为输出。
文件流要包含头文件
14.字符串流
头文件
strm.str(),返回字符串流strm中保存的字符串的副本。
strm.str(s),将字符串s复制到字符串流strm中,返回void。
15.函数
a.函数定义
返回值类型 函数名 (形参列表){
函数体
}
b.参数传递
(1)按值传递,用实参的副本将形参初始化,由于函数的封装性,当程序运行到调用函数时,程序将控制权转交给被调函数,在此过程中实参本身不参与函数运行,最后函数返回的值将主体函数中的变量赋值。
(2)传地址,将形参定义为指针,也就是说将实参的地址赋予形参,然后用取内容运算对指针指向的对象进行操作。实质上也是一种按值传递。
(3)传引用,将参数定义为引用,也就是说形参就是实参的另一个名字,对形参的操作就是对实参的操作,可以认为形参与实参绑定在一起,二者等同。
c.重载函数
函数名相同但是形参列表不同的一组函数。当调用重载函数时,编译器会根据实参的类型推断出要调用哪个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值