IO库和string、vector

  1. IO 库重载了移位运算符
    1.   C++并没有函数输出,而是奇怪的运算符scanf()     printf()
    2. 实际上cin他们是一个类的对象

       干脆禁止拷贝,因为要管理缓冲区,防止冲突

    3. <<移位有左结合性,所以具体应该是(cout<<a)<<b    前面应该返回一个cout
    4. 细度

       第一个参数是ostream 对象,因为禁止拷贝赋值,所以应该用它的引用;右侧是一个point对象,因为我们不会改变它所以合情合理的我们应该加上const,使用它的引用。

    5. 显示的向布尔转化,并不需要特殊的说明
    6. 输入流可能有一个发生错误的地方,读入数据的格式不正确。但是它不报错,此时可以直接在重载里处理

    7. 必须用引用,否则就和你创建的对象没啥关系了

    8. 因为函数多次用到,比较小,可以用内联 

  2. string库重载了+和【】
    1.   提供了两个string或者一个C风格双引号内,一个string单引号相合并
    2. getline

       想读一行,将这一行内容存在一个字符串里。遇到换行符就终止,加入进来舍去  。典型错误:读了一个数字,有一个换行符,在用getline直接读了个空,解决措施getline。ignore或者用两次getline

    3.  对象infile可以直接用字符串调用,也可以用open方法

    4. 其实和cin对象一模一样的
    5. 读取文件操作

    6. 文件模式  打开一个文件不是覆盖掉它,如果没有新建一个

       文件模式可以组合使用,||或就可以

  3. 字符串流stringstream
    1.   相当于给输入又做了一层缓冲
    2. 字符串的构造

    3. 字符串操作

       一言以蔽之,运算符的左结合性

    4. 总是考虑复合运算符

       效率有显著差别,一个类似push_back追加上去容器,一个需要两次拷贝

    5. 容器大小

       所有容器除了forwardlist都有size,只有string有length

    6. for语句

       用s字符串从0开始一个一个初始化C,所以必须加&

  4. vector
    1.   vector原来是模板类!vector《int》原来才是真正的类型
    2. 构造

       其他构造方式

       败笔混淆

    3. vector和string类似

       因为你不知道是连接还是对应值相加

       下标越界!不会检查但还是有at

    4. 基于范围的for语句

  5. C++也有自己的迭代器了!
    1.   it和其他语言类似Kolin
    2. it是迭代器里的值引用,重载了*运算符以便于修改

       迭代器的尾是最后一个元素的下一个,构成了一个左闭右开区间,这样写有许多好处 :比如end-begin就是迭代的长度,end永远小于begin,如果相等那么就是空的

    3. 尾后迭代器不能戒应用,因为它不指向是实际的元素,他只是指向最后一个元素的下一个位置
    4.  操作

    5. 基于范围的for语句实现借助于迭代器
      1.   什么东西可以放在后面,有begin和and,支持++。可以解引用
      2. 为什么用前置加++,因为后置加会赋值一次,我不用加之前的值就不需要后置浪费时间,所以迭代器都是前置加加
      3. 你可以为auto加const 复合使用
    6.   auto是一种自信

       底层const类型的迭代器 用cbegin就可以

    7.  为甚用!=而不是<,因为不是所有容器所有迭代器都提供<但是一定都有!=

 

 

 

 

  1. 具体使用范例
    1.   chrono日期时间库 

       

    2. 文件filesystem库

       

    3.  

    4.  

       

       相对路径和绝对路径 Linus从/开始 

    5.  

       

       

       

       

       

       resize是调整大小,后面可以在跟一个参数,如果不加就是默认的值初始化

       数据清零了内存不一定清楚,内存有可能还在

    6. 要找到存放类对象的向量中某一成员数据最大值的对象,您可以使用 `std::max_element` 算法,结合 lambda 表达式来实现。

      假设我们有一个存放 `Person` 类对象的向量,每个对象都有一个 `age` 成员变量,我们要找到 `age` 成员变量最大值的那个 `Person` 对象。示例代码如下:

      ```c++
      #include <iostream>
      #include <vector>
      #include <algorithm>

      class Person {
      public:
      int age;
      std::string name;

      Person(int _age, std::string _name) : age(_age), name(_name) {}
      };

      int main() {
      std::vector<Person> people = {
      Person(20, "Alice"),
      Person(25, "Bob"),
      Person(18, "Charlie"),
      Person(30, "David"),
      Person(22, "Eva")
      };

      auto max_it = std::max_element(people.begin(), people.end(),
      [](const Person& p1, const Person& p2) {
      return p1.age < p2.age;
      });

      std::cout << "The oldest person is: " << max_it->name << std::endl;

      return 0;
      }
      ```

      这将输出 `people` 向量中年龄最大的那个人的名字,即:

      ```
      The oldest person is: David
      ```

       

posted @ 2023-05-17 16:15  SunShine789  阅读(16)  评论(0)    收藏  举报