1.预处理器指示符
如果文件名用尖括号“<”和”>”括起来的,则表示该文件是工程或标准头文件,查找过程会检查预定义的目录。
如果文件名用双引号括起来,则表示该文件是用户自定义的头文件,查找该文件时将从当前文件目录开始。
2.注释块不能嵌套,即如下情况是不允许的
/*
* do not allow /**/
*/
3.文件结束符,mac上使用Ctrl + D;windows上使用Ctrl + Z;
—————-2016-07-12———————
4.string对象的输入操作符,
(1).读取并忽略开头的空白字符(如空格,换行符,制表符)
(2).读取字符直至再次遇到空白字符,读取终止.
5.用getline读取整行文本,getline返回的字符串不包含换行符
6.vector——高效的动态的添加元素
(1) 定义和初始化
vector<T> v1;//v1默认为空 vector<T> v2(v1);//v2是v1的副本 vector<T> v3(n,i);//v3包含n个值为i的元素 vector<T> v4(n);//v4含有值初始化的元素的n个副本
(2)常用操作
v.empty();//判断v是否为空 v.size();//返回v中元素个数,返回值类型为size_type v.push_back(t);//在v的末尾添加一个值为t的元素 v[n];//返回v中位置为n的元素,下标操作不允许添加元素,只能获取指定元素
7.迭代器用于访问容器内的元素,每个容器都定义了一个名为iterator的类型。
迭代器的简单使用:
std::vector<int>::iterator iter; for(iter = ivec.begin();iter!=ivec.end();iter++) { cout<<*iter<<endl; }
还可以通过迭代器改变vector中元素的值,具体如下:
std::vector<int>::iterator iter; for(iter = ivec.begin();iter!=ivec.end();iter++) { *iter = 0; cout<<*iter<<endl; }
除了iterator类型外,还有一种const_iterator类型,该类型的迭代器只能访问vector内的元素,不能更改其元素的值。
std::vector<int>::const_iterator citer; for(citer = ivec.begin();citer!= ivec.end();citer++) { cout<<"dasfjsdfj "<<*citer<<endl; }
8.数组
(1)非const常量以及要到运行阶段才知道其值的const常量都不能用于定义
数组的维数。如:
const int value = 3; int ss_size = 30; const int bb_size = getsize(); double a[ss_size];//error int b[value];//ok int c[bb_size];//error
(2)一个数组不允许使用另外一个数组初始化,也不允许将一个数组赋值给另一个数组,
如下:
int ia[] = {0,1,2}; int ia2[](ia);//error int ia3[3];//ok ,but elements are uninitialized! ia3 = ia;//error
(3)动态数组是只通过new 和delete分配存储空间,例如:
int *pia = new int[10];//ok,but uninitialed int *pia2 = new int[10]();//ok,initialed
(4)数组变量不允许创建空数组,而动态数组可以。如下:
char array[0];//error,cannot define zero length array char *cp = new char[0];//ok,但是不能对该指针进行解引用
(5)动态分配的数组最后必须显示地释放,否则最后将会逐渐耗尽。C++中使用delete[]释放指针所指向的数组空间。
delete []pia;
(6)动态数组的使用:
通常是因为在编译时无法确定数组维数,所以使用动态创建该数组。
后续更新中......