[primer]chapter3

chapter3类类型(构造函数来初始化,并且定义了对象适用的操作)
string类型,注意string与字符串字面值不是同一种类型!
1.string类型的输入操作符,读取并忽略开头的所有空白字符(如空格,换行符,制表符);读取字符知道再次遇到空白符,读取终止。

2.使用 getline 读取整行文本 ,getline 并不忽略行开头的换行符,并且读取到的内容不包括换行符。
getline(cin,string对象)

3.操作:
   s.empty();s.size()(空白字符也算);s[n];s1+s2;s1=s2;!=,==,>,>=,<,<=
  
4.string 类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关(machine-independent)。size_type 就是这些配套类型中的一种。它定义为与 unsigned 型(unsigned int 或 unsigned long)具有相同的含义,而且可以保证足够大能够存储任意 string 对象的长度。为了使用由 string 类型定义的 size_type 类型是由 string 类定义。

 

5.比较操作:大小写敏感的字典排序(大写字符小于小写)。字典排序是:a,如果两个 string 对象长度不同,且短的 string 对象与长的 string 对象的前面部分相匹配,则短的 string 对象小于长的 string 对象;b,如果 string 对象的字符不同,则比较第一个不匹配的字符

 

6.当进行 string 对象和字符串字面值混合连接操作时,+ 操作符的左右操作数必须至少有一个是 string 类型的,两个字符串面值可以直接拼在一处

 

7.string对象中字符的处理,对单个字符的函数在cctype头文件中

 

8.C++ 标准库除了定义了一些选定于 C++ 的设施外,还包括 C 标准库。C++ 中的头文件 cctype 其实就是利用了 C 标准库函数,这些库函数就定义在 C 标准库的 ctype.h 头文件中。C 标准库头文件命名形式为 name 而 C++ 版本则命名为 cname ,少了后缀,.h 而在头文件名前加了 c 表示这个头文件源自 C 标准库。

 

vector类型
构造函数(无需new来调用构造函数的!),操作。

 

1.模板分函数模板和类模板。vector为一个类模板。注意,vector不是一种数据类型,而是一个类模板,可用来定义任意多种数据类型!
vector<int>是一种数据类型

2.操作:v.empty();v.size();v.push_back(t);v[n];v1=v2;==;!=;<=;>=

3.安全的泛型编程:C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件(但是这种习惯在i不是逐渐加一时(即跳过==的时候)会现错误的!这里要仔细处理)。这个原因在学习完泛型编程再来考虑

 

      易出错的例子:

 


       分析:出错的原因主要是对for语句的执行顺序的把握问题。for循环时,先判断conditon,然后进入循环,再执行++i,接着重复这个过程,所以在循环体内i+=1;会使i=size,然后执行++i,使i=size+1,在进行判断!=条件时就跳过了,会出现错误,所以必须仔细处理,在循环体内出现==时就跳出!这一点很关键!!!即如果循环体内改变了i的值必须加入判断==跳出!!!!!  其实如果i+=2的话也是容易出现跳过==的情况的啊

 

 

这里对for循环的使用!for(;;;)三个分号:第一个初始化循环中使用的变量;second为condition;第三个为表达式。这三者的运行顺序和灵活使用要多练练!

4.vector的动态增长时的内存分配实现,一般我们无须讨论标准库的实现
    4.1 为了支持快速的随机访问,vector 容器的元素以连续的方式存放(连续的内存分配)。这里的访问元素的便利引入了内存分配问题的复杂(加入一个新元素)。这里详细讨论了标准库是如何实现vector的动态内存分配:以最小的代价连续存储元素(其实际分配的容量要比当前所需的空间多一些,只要有剩余的容量,vector 就不必为其元素重新分配存储空间。每当 vector 容器不得不分配新的存储空间时,一般的实现是(当然不同的实现策略不同)以加倍当前容量的分配策略实现重新分配),追求访问便利与存储代价之间的平衡
    4.2. vector内存分配提供了两个接口(程序员可以与内存分配实现进行交互):capacity和reserve。capacity 操作获取在容器需要分配更多的存储空间之前能够存储的元素总数,而 reserve 操作则告诉 vector 容器应该预留多少个元素的存储空间。

 

5. end迭代器是容器末端元素的下一个,实质上是指向了一个不存在的元素。
6.const_iterator迭代器其自身值可以改变但是其指向的元素是只读的;const iterator迭代器本身是只读的。
     // an iterator that cannot write elements
     vector<int>::const_iterator
     // an iterator whose value cannot change
     const vector<int>::iterator

7。vector迭代器也支持算术操作

 

8. 标准库bitset!进行位操作的类!!!构造函数,函数。要记住标准库中提供了位操作的类,别老是用int来做!!!
    8.1.构造函数:指定位数全初始化为0;unsigned long初始化;竟可以用含有位串的string来进行初始化
    8.2当用 string 对象初始化 bitset 对象时,string 对象直接表示为位模式。从 string 对象读入位集的顺序是从右向左.    

        string strval("1100");
        bitset<32> bitvec4(strval);//bitvec4的第2和3位是1

    8.3bitset存储的顺序是从低位开始存储,但是<<输出时还是遵循二进制的结构
9.size_t 类型定义在 cstddef 头文件中,该文件是 C 标准库的头文件 stddef.h 的 C++ 版本。它是一个与机器相关的 unsigned 类型,其大小足以保证存储内在中对象的大小.这里加深一下对size的函数返回类型的注意。size_t,以往的习惯是用int型的

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值