推荐引入万能头文件
#include<bits/stdc++.h>// 万能头文件 / 预编译头文件,它的本质是包含了 C++ 标准库中几乎所有常用的头文件(比如输入输出、字符串、容器、算法、数学函数等)
using namespace std;// 使用 std 命名空间,在代码中可以直接使用标准库中的标识符(如函数、类、变量等),无需额外添加 std:: 前缀
Vector
Vector 是变长数组,支持随机访问,不支持在任意位置 O(1) 插入。为了保证效率,元素的增删一般应该在末尾进行。
创建 vector
vector<int> v;// 创建一个空的 vector,元素类型为 int
vector<int> v1(10);// 创建一个含有 10 个元素的 vector,所有元素默认初始化为 0
vector<int> v2(10,42);// 创建一个含有 10 个元素的 vector,所有元素初始化为 42
vector<int> v3 = {1,2,3,4,5};// 使用列表初始化创建一个 vector (通过大括号{}直接列出初始化元素,称为'列表初始化')
vector<int> v[233];// 相当于第一维长 233,第二维长度变化的 int 数组
struct rec{...};
vector<rec> c;// 自定义的结构体类型也可以保存在 vector 中
访问元素
int x = v[0];// 访问第一个元素
int y = v.at(1);// 使用 at() 函数访问第二个元素,at() 会进行边界检查(若超出边界,则会抛出异常)
修改元素
v[0] = 10;// 修改第一个元素,O(1)
v.push_back(20);// 在 vector 末尾添加一个元素,O(1)
v.pop_back();// 删除末尾元素,O(1),请注意保证 vector 非空
遍历 vector
// 下标遍历
// 注意 v.size() 返回值为 unsigned int 类型,不要进行 -1 操作,否则可能会得到一个非常大的数,因为是用补码表示的。
// 不要使用 i <= v.size() - 1
`for(int i=0;i<v.size();i++){
cout<<v[i]<<' ';
}
cout<<endl;`
// 使用范围 for 循环
// elem 是从 v 中取出来的值
// 优点:方便,缺点:丢失下标信息
`for(int elem:v){
cout<<elem<<' ';
}
cout<<endl;`
// 如果 vector 存储的是 pair 类型或者结构体,c++17 版本以上可使用结构化绑定来枚举
// &表示引用枚举,不加&则是拷贝枚举
`vector<pair<int,int>> v_pair;
for(const auto &[x,y] : v_pair){
cout<<x<<' '<<y<<'\n';
}
查询 vector 大小
int size = v.size();// 返回 vector 中元素的个数
判空
if(v.empty())// 如果是空,则 v.empty() 会返回一个 true,否则返回 false
if(v.size())// 如果非空,则 v.size() 返回 1,为空返回 0
清空 vector
v.clear();// 移除所有元素,size 变为 0,O(n)
练习题

代码答案
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
int n;cin>>n;
vector<ll> v;
v.push_back(1),v.push_back(1);
for(int i=3;i<=n;i++){
v.push_back(*v.rbegin()+*(++v.rbegin()));
}
cout<<v.back()<<endl;
return 0;
}

