【数据结构】【C++STL】动态数组 集合 映射和优先队列
今天全都 比较 会了 2333 vector动态数组头文件为vector 构造方式为 vector< ll(类型) > vec(变量名) int main(){
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
for(register int i=0;i<vec.size();i++)
printf("%d ",vec[i]);
cout<<endl;
for(vector< ll >::iterator i=vec.begin();i!=vec.end();i++)
printf("%d ",*i);
cout<<endl;
vec[4] = 4;
vec[10] = 10;
vec[1] = 1;
for(register int i=0;i<vec.size();i++)
cout<<vec[i]<<" ";
cout<<endl;
cout<<vec[4]<<" "<<vec[10]<<" "<<vec[1]<<endl;
vec.clear();
cout<<"size:"<<vec.size()endl;
cout<<"但是元素还在不信你看"<<vec[0]<<" "<<vec[4]<<" ";
}
首先是插入元素 我们可以用第2行的push_back(x)在动态数组末尾插入一个元素 也可以像第13行一样直接搞 然后遍历方式有两种 第一个for循环是朴素的直接遍历 第二个是迭代器 问了一下清华大学的学长 按理说应该第二个快 刚才代码的输出结果为下图: set集合头文件为set 构造方式为 set< string(类型) > name(变量名) int main(){
name.insert("crstiano.ronaldo");
name.insert("lionel.messi");
name.insert("alexis.sanchez");
name.insert("somebody");
name.erase("somebody");
if(name.count("somebody"))
cout<<"2333"<<endl;
if(name.count("crstiano.ronaldo"))
cout<<"CR7 is a great soccer player!"<<endl;
for(set< string >::iterator i=name.begin();i!=name.end();i++)
cout<<*i<<" ";
cout<<endl;
cout<<name.size()<<endl;
name.clear();
cout<<name.size()<<endl;
}
怎么往name这个集合里面添加东西呢?第一行的name.insert(sth)就可以做到 同理name.erase(sth)就是删除元素了 于是后面的遍历里面也没有somebody 然后就是name.count(sth) 类似于一个询问 如果集合里有这个元素就返回true 否则返回false 关于遍历也是使用迭代器 name.clear()与vector里面的同理 刚才代码的输出结果为下图: map映射头文件为map 构造方式为 map< string(类型),string(类型) > team(变量名) int main(){
team.insert(pair< string,string > ("henry","arsenal"));
team.insert(pair< string,string > ("aguero","manchester city"));
team.insert(pair< string,string > ("terry","chelsea"));
team.insert(pair< string,string > ("somebody","aclub"));
cout<<team["henry"]<<endl;
cout<<team["somebody"]<<endl;
team["somebody"] = "arsenal";
cout<<team["somebody"]<<endl;
if(team.count("me"))
cout<<"i am in the "<<team["me"]<<endl;
else cout<<"i am a free soccer player"<<endl;
cout<<team["me"]<<endl;
if(team.count("henry"))
cout<<"henry is in the "<<team["henry"]<<endl;
else cout<<"henry is a free soccer player"<<endl;
cout<<"line up:"<<endl;
for(map< string,string >::iterator i=team.begin();i!=team.end();i++)
cout<<i->first<<" is in the "<<i->second<<endl;
cout<<team.size()<<endl;
team.clear();
cout<<team.size()<<endl;
}
插入映射好像挺麻烦的 因为我们需要一个pair类型的结构 比如说第二行的team.insert(sth) henry和arsenal都是string的 我们可以理解为 henry指向了arsenal(亨利永远都属于阿森纳!COYG) 所以我们输出team[“henry”]的时候就会输出arsenal 就好像回答你亨利是阿森纳队的一样 我们也可以像第8行那样直接搞 也没有问题 team.count()和set里面的也差不多 但是有一个神奇的现象 注意那个me 我从来没有加过它 结果它竟然在最后遍历的时候也被遍历出来了 但team[“me”]是空的 最后遍历也是迭代器 注意first和second分别代表什么 team.size()也一样 刚才代码的输出结果为下图: priority_queue优先队列头文件为queue 构造方式为 priority_queue< ll(类型) > q(变量名) 主要操作代码如下: int main(){
q.push(10);
cout<<q.top()<<endl;
q.push(1);
cout<<q.top()<<endl;
q.push(100);
cout<<q.top()<<endl;
cout<<"size:"<<q.size()<<endl;
q.pop(); q.pop();
cout<<q.top()<<endl;
cout<<"size:"<<q.size()<<endl;
}
比较好理解 q.push(x)放入元素 但是每次q.top()访问队首都是当前最大的 因为是大根堆 然后q.pop()就是弹出队首 q.size()和之前同理 刚才代码的输出结果为下图: 累 over COYG (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |