天天看点

C++ Primer第五版之(二)字符串、向量、数组

标准库string

  1. 表示可变长字符序列,定义在命名空间std中。

    ①string对象与字符字面值或字符串字面值混在一条语句中使用,须确保每个加法运算符两侧至少有一个运算对象是string。

    ②初始化=运算符执行拷贝初始化,其他执行直接初始化,所能执行操作如下:

    os<<s;将s写到输出流os当中,返回os
    is>>s;从is中读取字符串赋给s,字符串以空白分隔,返回is
    getline(is, s);从is中读取一行赋给s,返回is
    s.empty();s为空返回true,否则返回false
    s.size();返回s中字符的个数
    s[n];返回s中第n个字符的引用,位置n从0计起
    s1+s2;返回s1和s2连接后的结果
    s1 = s2;用s2的副本代替s1中原来的字符
    s1 == s2;判断相等,大小写敏感
    s1 != s2;
    注:<, <=, >, >=,字符在字典中的顺序比较,大小写敏感
               
  2. 标准库函数可执行操作:
    isalnum(c);c是字母或数字时为真
    isalpha(c);c是字母时为真
    iscntrl(c);c是控制字符时为真
    isdigit(c);c是数字时为真
    isgraph(c);c不是空格但可打印时为真
    islower(c);c是小写字母时为真
    isprint(c);c是可打印字符时为真(空格或可视形式)
    ispunct(c);c是标点符号时为真
    isspace(c);c是空白时为真
    isupper(c);c是大写字母时为真
    isxdigit(c);c是十六进制数字时为真
    tolower(c);c输出小写字母
    toupper(c);c输出大写字母
               

C风格字符串

  1. 可执行操作,传入参数必须以空字符结束:
    strlen(p);返回p的长度,空字符不计算在内
    strcmp(p1, p2);比较p1和p2的相等性,遇空字符结束
    strcat(p1, p2);将P2附加到p1并返回p1,去掉p1空字符附加p2再加上空字符
    strcpy(p1, p2);将p2拷贝到p1返回p1
               
  2. 大多数情况下,使用标准库string比使用C风格字符串更安全、高效。

    ①C风格字符串初始化string对象会去掉空字符。

    ②string对象的c_str()函数返回常量字符指针,指向以空字符结束的C风格字符串。

标准库vector

  1. 标准库类型vector表示对象的集合,称为容器。

    ①圆括号( )使用提供的值构造vector对象,花括号{ }使用提供的值列表初始化。

    ②如果使用{ }但提供的值不能用来列表初始化,则考虑用提供的值构造vector对象。

  2. 除了push_back操作,vector其他操作与string相关操作类似。
  3. 只能对确知已存在的元素执行下标操作。

迭代器

  1. begin成员返回指向第一个元素的迭代器,end成员返回尾元素的下一个位置,如果容器为空,两成员返回同一个尾后迭代器。
    *iter;返回迭代器iter所指元素的引用
    iter->mem;解引用iter并获取该元素的mem成员,等价于(*iter).mem
    ++iter;令iter指向容器中下一个元素
    --iter;令iter指向容器中上一个元素
    iter1 == iter2;两迭代器是否相等
    iter1 != iter2
               
  2. C++语言定义箭头运算符->结合解引用和成员访问两个操作。
  3. 迭代器类型iterator和const_iterator,begin和end返回类型由对象是否是常量决定,cbgein和cend返回值都是const_iterator。
  4. push_back等动态增长容器内容,不可在范围for循环中使用,会使迭代器失效。

数组

  1. 数组也是存放类型相同对象的容器,通过所在位置访问。

    ①数组大小固定,维度必须是常量表达式,下标索引值是无符号类型。

    ②大多数表达式中,数组名会转换为指向数组首元素的指针。

    ③数组不可初始化或赋值为另一个数组。

    ④字符串字面值初始化数组时结尾处有一个空字符。

  2. 数组的数组,即数组的元素也是数组。
  3. 标准库函数begin和end:

    ①int ia[10]; begin(ia)和end(ia)返回首元素指针和尾后指针。

  4. 不存在引用的数组,但存在数组的引用。
    int (*parray)[10];     //parray指向含有10个整数的数组
    int (&arrRef)[10];     // arrRef引用含有10个整数的数组
               

继续阅读