Day 1

文件结束符:windows:ctrl+z      unix:ctrl+d

文件重定向:程序名 < 输入文件名 > 输出文件名       如:add <input.txt> output.txt

宽字符:wchar_t    可以存放机器最大扩展字符集中的任意一个字符

Unicode字符:char16_t,char32_t   所有自然语言中的字符标准

unsigned:无符号      如果有unsigned修饰的变量且相减之后为赋值,则结果取模类型最大值,如果需要一个不大的非负整数可用unsigned char

20 /* 十进制 */                 024  /* 八进制 */                 0x14 /* 十六进制 */

初始化:创建变量时赋予其一个初始值

赋值:将对象当前值擦除,用一个新值代替

声明extern:        如 extern int i; //声明      int i;//定义            变量可用多次声明,但只能定义一次

标识符的规则:1.标识符要能体现含义    2.变量名一般用小写字母   3.用户自定义类一般用大写开头  如:struct Tree{};   4.如果标识符由多个单词组成,应有明显区分  如studentName   or   student_name

引用&:   引用必须被初始化,且必须引用对象   如 int  &a = b;//正确     i nt  &a;//错误    int &a = 10;//错误         注意:引用并非对象,它只是已经存在的对象的另一个名字

指针*:   其实指针*就是一个解引符号,注意:建议初始化所有指针    int *p = &a; //正确    int *p;  p = &a; //正确          int *p; *p = &a;//错误

1 int i=422 int *p = nullptr;      //p是一个指针
3 int *&r = p;            //r是一个对指针p的引用
4 r = &i;                   // r引用了一个指针,因此给r赋值&i,就是令p指向i
5 *r = 0;                  // 解引用r得到i,也就是p指向的对象,将i的值改为0

const限定符: 引用的类型必须与引用的对象的类型一致(有两种例外情况)

1 const int ci = 1024;
2 const int &r1 = ci;  //正确
3 r1 = 42;         //错误:r1是对常量的引用
4 int &r2 = ci;    //错误:试图让一个非常量引用指向一个常量

第一种例外情况:

1 double dval = 3.14;
2 const int &ri = dval;  //正确
3 
4 相当于
5 
6 const int temp = dval;   //生成一个零时的整型常量
7 const int &ri = temp;    //让ri绑定这个临时量
8 如果 &ri不是常量  如:int &ri = temp; //错误,修改ri时不知道赋值给谁

 指针和const:  

1 const double pi = 3.14;
2 const double *cptr = &pi; //正确
3 double *ptr = &pi; //错误,ptr是一个普通指针
4 *cptr = 42//错误,不能给*cptr赋值
5 
6 double dval = 3.14;
7 cptr = dval; //正确,但是不能通过*cptr修改dval的值

常量指针: int *const p = &a;        *p将一直指向a,且*p必须初始化

              同理:  const int *const p = &a;   都不可修改

1 int i = 0;
2 int *const p1 = &i; //不能改变p1的值,是顶层const
3 const int ci = 42;  //不能改变ci的值,是顶层const
4 const int *p2 = &ci; //允许改变p2的值,是底层const

c++ 11       constexpr:  一般来说,如果你认定变量时一个常量表达式,那就把它声明称constexpr类型

constexpr和指针:限定符constexpr仅对指针有效,与指针所指的对象无关

typedef :    typedef double a,*b;  //a是double的同义词,b是double *的同义词

c++11         decltype:选择并返回操作数的数据类型        如 decltype(f()) sum = x;//如果f() 返回值类型为int,那么等价于 int sum = x;

                 注意:int *p;   decltype(*p) 的结果类型是   int & 而非 int          decltype((variable)) (双层括号) 的结果永远是引用   如:int i; decltype((i))   == int &   

                           如果i是int型,则表达式i=x的类型是int & ,        如:int i ;   decltype(i = x)  == int & 

头文件保护符 :      #ifndef 当且仅当变量未定义时为真,一旦结果为真,则执行后续操作直至遇见 #endif 指令为止 

string:

1 string s5 = "hiya"; //拷贝初始化
2 string s6("hiya");  //直接初始化
3 string s7(10,'c');  //直接初始化  ,cccccccccc

getline(cin,str)  一次读一行

string::size_type类型 :  .size()的返回值类型 ,是一个无符号的返回类型

            注意:   如果一个具有负值的int,那么表达式 str.size() < n 几乎肯定是true;   因为负值n会自动转化为一个比较大的无符号值

vector:    注意:只能对确定已知存在的元素执行下标操作

1 vector <int> v1(10);    //10个元素,全是0
2 vector <int> v2{10};    //1个元素,10
3 vector <int> v3(10,1);   //10个元素,全是1
4 vector <int> v4{10,1};  //2个元素,10,1
5 
6 vector <string> v5{"hi"}; //1个元素,“hi”
7 vector <string> v6("hi");  //错误
8 vector <string> v7(10,"hi"); //10个元素,10个“hi”

迭代器:iterator  和 const_iterator(只读)

1 vector <int> ::iterator it;
2 vector <int> v;
3 for(it = v.begin();it != v.end();++it)
4       *it = 1;

 

posted @ 2018-03-12 21:28  yZi  阅读(195)  评论(0编辑  收藏  举报