C++ primer4 Chapter 3. Library Types

1, 使用 using 声明可以在不需要加前缀 namespace_name:: 的情况下访问命名空间中的名字。using 声明的形式如下:
     using namespace::name;

 

2, string 标准库支持几个构造函数:

       string s1;                     默认构造函数 s1 为空串
      string s2(s1);                将 s2 初始化为 s1 的一个副本
      string s3("value");       将 s3 初始化为一个字符串字面值副本
      string s4(n, 'c');            将 s4 初始化为字符 'c' 的 n 个副本
 
3, getline 函数从输入流的下一行读取,并保存读取的内容到不包括换行符。和输入操作符不一样的是,getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。

    由于 line 不含换行符,若要逐行输出需要自行添加。照常,我们用 endl 来输出一个换行符并刷新输出缓冲区。

 

4,  string 对象的操作

       s.empty()        如果 s 为空串,则返回 true,否则返回 false。
       s.size()       返回 s 中字符的个数,最好使用string::size_type 类型 作为返回类型
       s[n]           返回 s 中位置为 n 的字符,位置从 0 开始计数
       s1 + s2     把 s1 和s2 连接成一个新字符串,返回新生成的字符串
       s1 = s2      把 s1 内容替换为 s2 的副本
       v1 == v2        比较 v1 与 v2的内容,相等则返回 true,否则返回 false
      !=, <, <=, >, and >=    保持这些操作符惯有的含义

5, 我们经常要对 string 对象中的单个字符进行处理,例如,通常需要知道某个特殊字符是否为空白字符、字母或数字。表列出了各种字符操作函数,适用于 string 对象的字符(或其他任何 char 值)。这些函数都在 cctype 头文件中定义。

       isalnum(c)     如果 c 是字母或数字,则为 True。
       isalpha(c)          如果 c 是字母,则为 true。
       iscntrl(c)      如果 c 是控制字符,则为 true
       isdigit(c)    如果 c 是数字,则为 true。
       isgraph(c)   如果 c 不是空格,但可打印,则为 true。
       islower(c)      如果 c 是小写字母,则为 true。
       isprint(c)       如果 c 是可打印的字符,则为 true。
       ispunct(c)       如果 c 是标点符号,则 true。
       isspace(c)       如果 c 是空白字符,则为 true。
       isupper(c)       如果 c 是大写字母,则 true。
       isxdigit(c)       如果是 c 十六进制数,则为 true。
       tolower(c)       如果 c 大写字母,返回其小写字母形式,否则直接返回 c。
       toupper(c)      如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。
 
6, vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。我们把 vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。以 vector 为例,必须说明 vector 保存何种对象的类型,通过将类型放在类型放在类模板名称后面的尖括号中来指定类型:
           vector<int> ivec;               // ivec holds objects of type int
           vector<Sales_item> Sales_vec;   // holds Sales_items
    vector 类定义了好几种构造函数(2.3.3 节),用来定义和初始化 vector 对象。

           vector<T> v1;        vector 保存类型为 T 对象。默认构造函数 v1 为空。
           vector<T> v2(v1);       v2 是 v1 的一个副本。
           vector<T> v3(n, i);        v3 包含 n 个值为 i 的元素。
           vector<T> v4(n);      v4 含有值初始化的元素的 n 个副本。
 
7, 几种最重要的 vector 操作。

          v.empty()             如果 v 为空,则返回 true,否则返回 false。
          v.size()                 返回 v 中元素的个数。     vector<int>::size_type        // ok
          v.push_back(t)    尾增加一个值为 t 的元素。
          v[n]              返回 v 中位置为 n 的元素。    必须是已存在的元素才能用下标操作符进行索引。 通过下标操作进行赋值时,不会添加任何元素。
          v1 = v2         把 v1 的元素替换为 v2 中元素的副本。
          v1 == v2       如果 v1 与 v2 相等,则返回 true。
         !=, <, <=, >, and >=         保持这些操作符惯有的含义。
 
8,标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。

      每种容器类型都定义了自己的迭代器类型,每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。如 vector:
         vector<int>::iterator iter;

9, 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素,由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”.

         vector<int>::iterator iter = ivec.begin();

 

10,迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭代器所指向的元素,解引用操作符返回迭代器当前所指向的元素。假设 iter 指向 vector 对象 ivec 的第一元素,那么 *iter 和 ivec[0] 就是指向同一个元素。下面这个语句的效果就是把这个元素的值赋为 0。迭代器使用自增操作符(1.4.1 节)向前移动迭代器指向容器中下一个元素。
             *iter = 0;

 

11,标准库提供的 bitset 类简化了位集的处理。要使用 bitset 类就必须包含相关的头文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值