STL专项:vector 变长数组

以下内容为学习过程中所记录的笔记

推荐引入万能头文件

**#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> a[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)

练习题

斐波那契数列 | 星码StarryCoding 算法竞赛新手村

代码答案

cpp 复制代码
#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;
}

悄咪咪:今天是主播生日哦,哈哈路过的宝子给主播发句生日祝福,感谢么么哒

相关推荐
念恒123063 小时前
继承(下) (Inheritance)
c++
H Journey4 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
研究点啥好呢9 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
_dindong9 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
沫璃染墨9 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
6Hzlia9 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
计算机安禾10 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
unicrom_深圳市由你创科技10 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
无限进步_10 小时前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
C++ 老炮儿的技术栈11 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt