c++ primer 笔记第三章字符串、向量和数组(一)

第三章字符串、向量和数组

梗概:本章先是提到了命名空间的使用,之后重点介绍STL里的vector和string两个部分。后面又讲解了迭代器的概念以及更底层的数组及多维数组的概念。

3.1命名空间的using声明

    使用别的文件中的变量或者函数需要预先声明,或者是使用::来表示。每次都加很麻烦,可以在文件开头使用using namespace::name;语句来声明一个变量或者函数。例如using std:cin;

     头文件中尽量不适用using声明。

 

3.2标准库类型string

      #include 

      using std:string;

  3.2.1定义和初始化string对象

      加了以上两个语句之后可以直接使用string的操作。

      使用等于号是拷贝初始化,直接用括号是直接初始化。

      string  s1; string s2 = s1; string s2(s1); string s3 = "hiya"; string s4(10, 'c');

 

  3.2.2 string对象上的操作

      string可以直接使用iostream读写,使用getline读取一行。

     cout读取string时忽略开头空白,之后到遇到空白停止。

     getline读取到换行符,不保存换行符。

     size() 返回string::size_type类型,无符号整数。

     字面值与string对象可以直接相加返回string对象。

     os << s;   is >>s;   getline(is, s);   s.empty();   s.size();   s[n];   s1+s2;   s1 = s2;   s1 == s2;   s1 != s2;   <, <= , > , >=。

     练习3.3 string的输入运算符跳过开头空白,之后遇到空白停止。 getline读取空白作为string对象的内容直到遇到换行符。

 

   3.2.3 处理string对象中的字符

       cctype头文件中有处理字符的函数。

       范围for语句: for (declaration : expression) statement;

       循环时改变string对象中的字符需要声明为引用,如for(auto & c: s) c= toupper(c);

       下标运算符可以直接取string对象中的字符,返回的是引用类型。注意下标越界。类型是string::size_type。

       练习3.6 

for (auto & x : s)
    x = 'X';

     练习3.7 s不变

     练习3.9 不合法 s是空串 下标越界

     练习3.10 合法  const char &

 

    3.3 标准库类型vector

       vector是类模板,使用需要提供对象类名。

       vector是对象的容器,因此不存在引用的vector。

     3.3.1 定义和初始化vector对象

        普通初始化与string类似。

        列表初始化vector articles = { "a", "an", "the"},此时不能用圆括号。

        创建指定数量的元素 vector ivec(10, -1)。

        列表初始化与指定元素数量:花括号优先列表初始化,如类型不符考虑为指定数量。圆括号指定数量。

        练习3.12 (a) T (b) 错误,类型不一致 (c) 正确

   

     3.3.2 向vector对象中添加元素

       v.push_back()函数从最后添加元素进v。

       vector可以高效增长,无需预先设定长度。

       添加元素时不能使用范围for循环。

     

      3.3.3 其它vector操作

         和string类似。

         只有当vector内部的对象可比较时,vector对象才可以比较。

         vector索引与string类似。不能直接使用下标添加对象,数组下标越界。

         练习3.19 vector v(10,42); vector v = {42,42,...,42}; push_back

 

          

 

你可能感兴趣的:(C++)