第一部分——基本语言

由于学习过C++高级程序设计语言相关课程,因此在阅读本书时,仅将个人觉得生疏,需要学习的部分摘取出来

 

1:枚举

枚举成员的默认常值,第一个值为0,后面的以递增的自加、

也可以指定某一个成员的值,从该成员开始值递增

枚举成员值可以是不唯一

 

2预处理器:用指定的头文件的内容替代每个#include

一个头文件可能被多次包含,为了避免名字冲突,需引入一些额外的预处理器设施

#ifndef  (变量用全大写字母表示)

#define

#endif

 

3左值lvalue可以放在赋值号=的左边和右边

右值rvalue 只能放在赋值号=的右边

 

库类型都定义了一些配套类型,如string类中的size()函数返回的类型是size_type,它与unsigned型具有相同的含义,而且可以保证足够大能够存储任意string对象的长度

4:标准库string类型,支持长度可变的字符串

5:标准库vector类型,同一种类型的对象的集合,称之为容器,是一个类模板

构造函数:vector<T> v1    vector<T> v2(v1)    vector<T> v3(n, i)    vector<T> v4(n)

也可以利用数组初始化vector对象,vector<T> ivec(int* p1, int* p2),两个指针p1p2分别是首元素的地址和最后一个元素之后的地址

优势:可以在运行时高效地添加元素

操作:empty()判断是否为空

      size()返回元素个数,类型为size_type

      push_back(t)在末尾增加一个值为t的元素

      v1[n]提取容器中的元素,下标只能用于获取已经存在的元素

6迭代器,除了使用下标访问元素外,还可以使用迭代器,迭代器是一种检查容器内元素并遍历元素的数据类型

每种容器类型都定义了自己的迭代器类型,例  vector<int>::iterator iter;

容器的beginend函数,用于返回迭代器,begin()函数返回指向第一个元素的迭代器,end()函数返回指向vector末端元素的下一个的迭代器,它指向了一个不存在的元素

使用解引用操作符*操作符)来访问迭代器所指向的元素,且使用自增运算符++)指向下一个元素,也支持迭代器算术操作

const_iterator类型和iterator类型的区别是,只能用于读取容器内元素,但不能改变元素的值

7:标准库bitset类型

构造函数 bitset<n> b    bitset<n> b(u)    bitset<n> b(s)    bitset<n> b(s, pos, n)

unsigned值初始化bitset对象,如果bitset类型长度大于unsigned long值的二进制位数,其余的高阶位将置为0

操作:any()是否存在置为1的二进制位

      none()是否不存在置为1的二进制位

      count()  size()  test()  set()  set(pos)  reset()  reset(pos)  flip()  flip(pos)

      to_ulong()返回一个unsigned long

动态分配的数组在使用后要释放内存

8C风格字符串   #include<cstring>必须以结束符null/‘\0'结束,strncpy(s1, s2, n)

                 strncat(s1, s2, n)

C++标准库类string   #include<string> strcat(s1, s2)  strcpy(s1, s2)

const char *str = st2.c_str();   c_str()函数将string类对象转化为C风格字符串

尽量使用C++标准库类

 

9:指向常类型的指针  const int *p1;

常指针  int* const p1;

 

 

表达式

1IO操作符“<<  >>”的左结合性

赋值操作符的右结合性,赋值运算符的优先级低于不等操作符

2:前置自增、自减操作符返回加或减1的值

后置的则返回原来的值

3:逗号表达式从左向右计算,结果是其最右边表达式的值

4:强制转换符号

1)旧式  type (expr)  (type) expr

2)命名  cast-name<type> (expression)其中cast-name可以是static_cast / dynamic_cast / const_cast / reinterpret_cast之一

type均为目标类型

5:使用预处理器进行调试

#ifndef  #endif

四种在调试时非常有用的常量:__FILE__  __LINE__  __TIME__  __DATE__

 

 

函数

1:指向指针的引用,例  int* &a;

从右到左理解,a是一个引用,与指向int型对象的指针相关联

 

2:形参是固定大小的数组

F(int (&arr)[10])  参数数组的长度为10,括号不能省略

利用模板形参传递指向任意大小的数组的引用形参

template<class T, size_t N> 

void array_init(T (&parm)[N])  在调用时指定N

 

3:指向函数的指针

bool (*pf)(const string&, const string&); pf为指向函数的指针,它所指向的函数带有两个const string&类型的形参和bool类型的返回值;

typedef简化函数指针类型的定义:typedef bool(*cmpFcn)(const string&, const string&)这样cmpFcn表示指向返回bool类型并带有两个const strng引用形参的函数的指针类型


 

标准IO

1:每个IO类定义了三个iostate类型的常量值,表示特定的位模式

badbit标志着系统级的故障,无法恢复的读写错误;failbit标志着可出现的错误,如在希望获得数值型数据时输入了字符;eofbit是在遇到文件结束符时设置的

流的状态由badfaileofgood操作揭示,badfail或者eof中任意一个为true,则流本身将显示该流处于错误状态;如果这三个条件中没有一个为true,则good操作将返回true

clearsetstate操作用于改变条件成员的状态,clear操作将条件重设为有效状态

IO对象的操作:eof() fail() bad() good() clear() clear(flag) setstate(flag) rdstate()

              flagstrm::iostate,有strm::badbit, strm::failbit, strm::eofbit

 

2:输出缓冲区的管理

先将数据存储在于输出流对象有关的缓冲区中,缓冲区在几种情况下会被刷新

1)程序正常结束

2)缓冲区满了

3)操作符显示地刷新缓冲区

4)输入流和输出流关联起来的时候

操作符有flush(不在输出流中添加任何东西)ends(添加nullendl(添加换行)

若程序崩溃了,则不会更新缓冲区

 

3读写文件时,则必须定义自己的对象,并将它们绑定在需要的文件上;若需重新和其他文件绑定,则必须先关闭现在的文件,调用close()函数即可

    在对文件进行操作之前,需指定文件模式(in/out/app/ate/trunc/binary);模式是文件的属性而不是流的属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值