vector详解+题目
介绍
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
vector是向量,即可变长数组 或者动态数组
容器使用一个内存分配器对象来动态地处理它的存储需求。
vector的元素不仅可以是int,double,string,还可以是
结构体(注意:结构体要定义为全局的,否则会出错)。
序号 | 功能 | 代码样例 | 效果介绍 |
---|---|---|---|
1 | 尾部插入 | a.push_back(x) | 在容器尾部插入一个值为x的元素 |
2 | 中间插入 | a.insert(a.begin()+i,x) | 在第i个元素前插入x |
3 | 求长度 | a.size() | 返回元素个数 |
4 | 删除尾巴 | a.pop_back() | 删除尾部的元素 |
5 | 删除某个元素 | a.erase(v.begin()+i) | 删除下标为i位置的元素 |
9 | 删除某段 | a.erase(v.begin()+l,v.begin()+r) | 删除下标[l,r)的元素 |
10 | 清空 | a.clear() | 清空容器所有元素 |
11 | 排序 | sort(a.begin(),a.end()); | 将a中元素按升序排列 |
题目
递归实现指数型枚举
此过程可以用递归加vector完成,用递归来确定选或不选,再用vector进行选或不选的添加和回溯
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> a;
void calc(int x){
if (x==n+1){
for (int i=0;i<a.size();i++)
printf("%d ",a[i]);
printf("\n");
return;
}
calc(x+1);
a.push_back(x);
calc(x+1);
a.pop_back();
}
int main(){
scanf("%d",&n);
calc(1);
return 0;
}
递归实现组合型枚举
老样子,加一个剪枝即可
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<int> a;
void calc(int x,int dis){
if (dis==m){
for (int i=0;i<a.size();i++)
printf("%d ",a[i]);
printf("\n");
return;
}if (x==n+1)return;
a.push_back(x);
calc(x+1,dis+1);
a.pop_back();;
calc(x+1,dis);
}
int main(){
scanf("%d%d",&n,&m);
calc(1,0);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!