从零单排c++ primer(4)

(1)和指针不一样的是,获得迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。比如,这些类型都名为begin和end的成员。
(2)在特殊情况下如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。
(3) 拥有迭代器标准库类型使用iterator和const_iterator来表示迭代器的类型。
(4)begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator,如果对象不是常量,返回iterator 
(5)迭代器距离类型difference_type是一个带符号的类型。 
(6)使用迭代器运算进行二分搜索算法:
     auto beg = text.begin(), end = text.end();
     auto mid = text.begin() + (beg - end) / 2;
     while (mid != end && *mid != sought) 
     {
         if(sought < *mid) 
              end = mid;
          else 
              beg = mid + 1;
              mid = big + (end - beg) / 2;
      } 
(7)数组的维数必须是一个常量表达式。
(8)和内置变量类型一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组含有未定义的值。
(9)数组的元素应为对象,因此不存在引用的数组。
(10)字符数组有一种额外的初始化形式,我们可以用字符串字面值对此类数组进行初始化。
(11)不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。
(12)要想理解数组声明的含义,最好的办法是从数组的名字开始按照由内向外的顺序阅读。
                int  *(&arry)[10] = ptrs;  //arry是数组的引用,该数组含有10个指针。
(13)数组下标的类型通常定义为size_t类型,在cstddef头文件中。
(14)在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针。
                //c++ primer第五版 p106页 中间部分 注释有错误,不是arr尾元素,是ia尾元素。
(15) 尾后指针不能执行接引用和递增操作。
(16) 内置的下标运算符所用的索引值不是无符号类型,这一点与vector和string不一样。
(17) c风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法,按此习惯书写的字符串存放在字符数组中并以空字符结束。
(18)对于大多数应用来书,使用标准库string要比使用c风格字符串更安全,更高效。
(19) 现代的c++程序员应当尽量使用vector和迭代器,避免使用内置数组和指针,应该尽量使用string,避免使用c风格的基于数组的字符串。
(20)使用数组初始化vector
                    int int_arr[] = {0,1,2,3,4,5};
                    vector<int> ivec(begin(int_arr),end(int_arr)); 
(21)严格意义上讲,c++语言没有多维数组,通常所说的多维数组其实就是数组的数组。
(22)对于二维数组来说,常把第一个维度称为行,第二个维度称为列。
(23) 要使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。
(24)当程序使用多维数组的名字时,也会自动将其转换成指向数组首元素的指针。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值