C++ STL

vector

//STL:向量vector
int a[100];
//vector定义
vector<int> vi;//一维向量
// vector<int> vi[100];//二维向量
​
// //vector赋初值
// vector<int> ve{1, 2, 3, 4, 5};//用花括号赋初值
// vector<int> vs(5); //创建5个元素,值为0
// vector<int> vd(100,2) //创建100个元素,初始化为2
​
int main(){
    //vector访问
    //1.通过下标访问
    //2.通过迭代器访问
    //迭代器:是一种指针,指向容器中的某个位置
    vector<int>::iterator it;
    //以上,创建一个int类型vector容器的迭代器,叫it
    //it是个指针
    vi.begin();//返回第一个元素的地址
    vi.end();//返回最后一个元素下一个元素的地址
    for (it = vi.begin(); it != vi.end();it++){
        cout << *it << " ";
    }
​
    //vector常用方法
    vi.push_back(x); //将x插入到vector的末尾
    vi.pop_back(x); //将vector最后一项弹出(删除)
    vi.size(); //返回vector的大小
    vi.clear(); //清空vector
​
    vi.insert(it, x); //在it所指向的位置(it是指针),插入x
    //vi.insert(vi.begin()+4, 5);
​
    vi.insert(it, first, end);
    //指,在it位置之前,插入另一个容器(不一定是vector)的
    //first到end位置,左闭右开
    //vi.insert(vi.end(), ve.bengin(), ve.end());
​
    vi.erase(it); //删除it位置的元素
    vi.erase(first, end);//删除[first,end)范围的元素

DFS

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[100][100],b[100][100];
int startx,starty,endx,endy;
int n,m;
int v=999999;
void dfs(int x,int y,step){
    int tx,ty;
    int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
    if(x==endx&&y==endy){
        if(step=v){
            v=step;
            return;
        }
    }
    for(int k=0;k<=3;k++){
        tx=x+dx[k]
        ty=y+dy[k]
        if(tx<1||tx>n||ty<1||ty>>m) continue;
        if(a[tx][ty]==0&&b[tx][ty]==0){
            b[tx][ty]=1;
            dfs(tx,ty,step+1);
            b[tx][ty]=0;
        }
    }
    return;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    cin>>startx>>starty;
    cin>>endx>>endy;
    b[startx][starty]=1;
    dfs(startx,starty,0);
    cout<<"从"<<startx<<","<<starty<<"到"<<endx<<","<<endy<<endl;
    cout<<"最短路径为"<<v;
}

集合set

集合的好处:可以自动排序,且去重

首先导入头文件****

定义:set<数据类型(int,……)> 集合名;** **// 默认从小到大排序

从大到小排序的定义方式:set<数据类型(int,……),greater****> 集合名;

集合操作

集合名.insert(变量名)** **// 将变量插入集合中

集合名.erase(变量名)** **// 删除集合中的变量元素,如果返回1则删除成功,如果返回0则集合中不存在这个变量元素

集合名.clear()** **// 清空集合

集合名.empty();** **// 判断集合是否为空,是返回1,否则返回0

集合名.size();** **// 返回集合中元素的个数

集合迭代器

set**::iterator 迭代器名; **创建迭代器

for(迭代器名 = 集合名.begin();迭代器名 != 集合名.end();迭代器名 ++){

cout << *迭代器名 << ' ';

}

在变量面前加*号,会输出变量的地址

在地址面前加*号,会输出地址的变量

刺杀名单:

TimSort: LV1919810

动态规划: LV114514

可爱的数据结构们: LV1145

贪心:LV810

MSF:LV??????

KALI: LV1145141919810

C++STL:LV1919

lefeng: LV1145141919810????????(NO!!!!)

xhd等级:114

1 条评论

  • 1