IO库和string、vector
- IO 库重载了移位运算符
- C++并没有函数输出,而是奇怪的运算符scanf() printf()
- 实际上cin他们是一个类的对象
![]()
干脆禁止拷贝,因为要管理缓冲区,防止冲突
- <<移位有左结合性,所以具体应该是(cout<<a)<<b 前面应该返回一个cout
- 细度
![]()
第一个参数是ostream 对象,因为禁止拷贝赋值,所以应该用它的引用;右侧是一个point对象,因为我们不会改变它所以合情合理的我们应该加上const,使用它的引用。
- 显示的向布尔转化,并不需要特殊的说明
-
![]()
输入流可能有一个发生错误的地方,读入数据的格式不正确。但是它不报错,此时可以直接在重载里处理
-
必须用引用,否则就和你创建的对象没啥关系了
-
因为函数多次用到,比较小,可以用内联
- string库重载了+和【】
- 提供了两个string或者一个C风格双引号内,一个string单引号相合并
- getline
![]()
想读一行,将这一行内容存在一个字符串里。遇到换行符就终止,加入进来舍去 。典型错误:读了一个数字,有一个换行符,在用getline直接读了个空,解决措施getline。ignore或者用两次getline
-
![]()
![]()
![]()
![]()
对象infile可以直接用字符串调用,也可以用open方法
- 其实和cin对象一模一样的
- 读取文件操作
![]()
- 文件模式 打开一个文件不是覆盖掉它,如果没有新建一个
![]()
文件模式可以组合使用,||或就可以
- 字符串流stringstream
- 相当于给输入又做了一层缓冲
-
![]()
![]()
- 字符串的构造
![]()
- 字符串操作
![]()
![]()
一言以蔽之,运算符的左结合性
- 总是考虑复合运算符
![]()
效率有显著差别,一个类似push_back追加上去容器,一个需要两次拷贝
- 容器大小
![]()
所有容器除了forwardlist都有size,只有string有length
- for语句
![]()
用s字符串从0开始一个一个初始化C,所以必须加&
![]()
- vector
- vector原来是模板类!vector《int》原来才是真正的类型
- 构造
![]()
其他构造方式
![]()
败笔混淆
![]()
- vector和string类似
![]()
因为你不知道是连接还是对应值相加
![]()
下标越界!不会检查但还是有at
- 基于范围的for语句
![]()
![]()
- C++也有自己的迭代器了!
- it和其他语言类似Kolin
- it是迭代器里的值引用,重载了*运算符以便于修改
![]()
迭代器的尾是最后一个元素的下一个,构成了一个左闭右开区间,这样写有许多好处 :比如end-begin就是迭代的长度,end永远小于begin,如果相等那么就是空的
- 尾后迭代器不能戒应用,因为它不指向是实际的元素,他只是指向最后一个元素的下一个位置
-
![]()
操作
![]()
![]()
![]()
- 基于范围的for语句实现借助于迭代器
- 什么东西可以放在后面,有begin和and,支持++。可以解引用
- 为什么用前置加++,因为后置加会赋值一次,我不用加之前的值就不需要后置浪费时间,所以迭代器都是前置加加
- 你可以为auto加const 复合使用
- auto是一种自信
![]()
![]()
![]()
底层const类型的迭代器 用cbegin就可以
-
![]()
![]()
为甚用!=而不是<,因为不是所有容器所有迭代器都提供<但是一定都有!=
- 具体使用范例
- chrono日期时间库
![]()
- 文件filesystem库
![]()
-
![]()
-
![]()
![]()
![]()
相对路径和绝对路径 Linus从/开始
-
![]()
![]()
![]()
![]()
![]()
![]()
![]()
resize是调整大小,后面可以在跟一个参数,如果不加就是默认的值初始化
![]()
数据清零了内存不一定清楚,内存有可能还在
-
要找到存放类对象的向量中某一成员数据最大值的对象,您可以使用 `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
```
- chrono日期时间库


















































浙公网安备 33010602011771号