0%

C++ Primer Ch3

  1. 不应该在头文件中使用using,因为会改变所有引用该头文件的文件
  2. string变量的复制是拷贝不是仅仅复制引用
  3. string类型的size以及length方法没有任何区别,一开始只有length方法,后来为了兼容STL,所以引入了size方法
  4. 由于历史原因,c++中的字符串字面量的类型并不是string,但是string类型依然可以直接与字面量进行相加的操作,字面量会自动进行转换
  5. 基于范围的for循环
    1
    2
    3
    for (auto c : str) {
    cout <<c << endl;
    }
    在遍历时使用引用变量从而能够在遍历过程中修改遍历对象,同时也能够避免不必要的复制。而且在遍历多维数组的时候,为了能够保留作为数组的相关信息,使得能够在内层正确遍历,除了最里面一层之外的循环都需要使用引用
    1
    2
    3
    4
    5
    for (auto &c : str) {
    if (isalnum(c)) {
    c = '';
    }
    }
  6. 对vector的复制同样是拷贝而不是复制引用,嵌套vector同样如此
  7. 在使用for循环遍历容器的时候,判断条件一般都使用!=而不是<,由于所有的标准库容器以及迭代器都定义了==以及!=,但并不是都定义了<,所以应该养成习惯使用!=作为终止条件
  8. cbegin()以及cend()返回普通迭代器的const版本,不论容器本身是否为const,通过该迭代器均为只读
  9. 某种程度上可以认为c++中的struct支持类方法,所以对->操作符进行了相应的拓展,使其不仅能够通过指针访问成员,也可以通过指针访问类方法,当我们定义一个vector<string>的迭代器iter的时候,我们既可以使用(*iter).empty()也可以使用iter->empty()
  10. 不要在范围for循环中改变容器的大小
  11. 使用string类型的c_str方法,可以得到一个C类型的字符数组,但是不能保证该字符数组一直有效,比如说对string进行了修改就有可能导致其失效,所以最好是在调用了c_str之后对得到的字符数组进行手动的拷贝