欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

class10 zhc vector、set、map

时间:2024-06-02 10:06 作者:admin 点击:
双向队列 int q[1000],r1=0,f1=0,r2=0,f2=0; 循环队列:手写队列时,约瑟夫问题,使用的内存较大 int q[1000],r=0,f=0,maxnum=20; 入队 q[r++]=x; if(r=maxnum) r=0; 出队 f++; if(f=maxnum) f=0; 入队 q[r++%=maxnum]=x; 出

双向队列

int q[1000],r1=0,f1=0,r2=0,f2=0;

循环队列:手写队列时,约瑟夫问题,使用的内存较大

int q[1000],r=0,f=0,maxnum=20;

入队

q[r++]=x;

if(r>=maxnum) r=0;

出队

f++;

if(f>=maxnum) f=0;

入队

q[r++%=maxnum]=x;

出队

f++;f%=maxnum;

//------------------

stack 和 queue 在c++中都是有工具包

以下的容器也有类似的功能

vector 向量(可变数组),可以当数组用,长度还能改变

创建一个向量,类型为int,变量名为v

vector<int> v;

存数据1:push_back()

v.push_back(6);//6

v.push_back(3);//6 3

存数据2:下标

v[4]=5;//4下标对应的空间存5

当前向量大小为2,5不属于向量内的数据,但是可以使用

int n;

cin>>n;

for(int i=0;i<n;i++){

   cin>>a;

   v.push_back(a);

}

for(int i=0;i<5;i++){

   cout<<v[i];63 5

}

for(int i=0;i<v.size();i++){

   cout<<v[i];//63

}

set 集合,关联容器 自动去重,自动升序

set<int> s;

int n;

cin>>n;

for(int i=0;i<n;i++){

   cin>>a;

   s.insert(a);

}

//set不能使用下标,所以c++提供了遍历数据的迭代器(当成有方向的指针)

s.begin();//开头地址

s.end();//结尾地址

for(set<int>::iterator i=s.begin();i!=s.end();i++){

   //i++ 是指下一个位置,不是数字+1

   cout<<*i<<" ";

}

/*

指针:存放元素的地址

指针类型必须与元素类型一致

指针指向普通数据类型

指针指向数组

int a[10];//这里的a就是一个指针

int *p=a;

cout<<a<<" "<<&a[0]<<" "<<p;//都一样

for(int i=0;i<n;i++) cout<<a[i];

for(int i=0;i<n;i++) cout<<*(a+i);

for(int *i=a;n--;i++) cout<<*i;

//传入int 数组作为参数

void f(int *a,int n){

   //数组的地址开头,以及数组的大小

}

//传入vector

void f(vector<int> v){


}

指针指向字符数组

char c[10];

char *p;

指针指向字符串

string s="12345";

char *p=&s;

cout<<*p;//1

string *p=&s;

cout<<*p;"12345"

*/

map 映射(字典,哈希)自动去重(按key),自动升序(按key)

存值成对儿存在,也叫键值对【key-valve】


map<int,string> m;

m[1]="wang";

m[5]="li";

m[3]="zhang";

m[3]="zhao";//zhang被zhao覆盖


m.insert(map<int,string>::value_tpye({4,"wang"}));

m.insert(map<int,string>::value_tpye({4,"zhao"}));//存放失败,不会报错


for(map<int,string>::iterator i=m.begin();i!=m.end();i++){

   cout<<i->first<<" "<<i->second<<endl;

   //分别代表key和valve

}



输入n,输入n个字符串,输入一个字符串k

询问k是否在n个字符串中,统计出现的次数



map<string,int> m;

int n;

cin>>n;

string s,k;

while(n--){

   cin>>s;

   m[s]++;

}

cin>>k;

if(m[k]==0) cout<<"no";

else cout<<"yes";

cout<<m[k];//k出现的次数



multiset 可重复集合,在<set>中,用法与set一致

multimap 可重复映射,在<map>中,用法与map稍微不同,下标用法无法使用


默认理解词

升序:从小到大

降序:从大到小

字典序:从首字母开始按ASCII值从小到大

取模:取余


课上:2004

作业:2075



(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%