---恢复内容开始---

C++ STL 与ACM竞赛相关的应用

1、vector

vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组。

常用操作如下:

  • 容量

    • vec.size()    向量大小
    • vec.empty()  向量判空 (如果为空==true、不为空==false)
  • 修改
    • vec.push_back()   向向量末尾添加一个元素
    • vec.pop_back()   删除向量末尾元素
    • vec.insert()     向向量中任意位置插入元素
    • vec.erase()    删除任意位置元素
    • vec.swap(,)    交换任意两个位置的向量
    • vec.clear()    清空向量元素
  • 迭代器
    • vec.begin()    开始指针
    • vec.end()    末尾指针
  • 元素访问
    • vec[1],vec[2]   下标直接访问
    • vec.front()    访问第一个元素
    • vec.back()    访问最后一个元素

示例:

#include <bits/stdc++.h>
using namespace std; vector<int>v;///声明部分
int main()
{
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();///插入元素
if(!v.empty())///判断是否为空
{
v.pop_back();///3 出
v.pop_back();///1 出
v.pop_back();///2 出
}
///迭代器的用法
vector <int> :: iterator it;
for(it=v.begin();it != v.end(); it++)///遍历元素
{
cout<<*it<<endl;
}
v.insert(it,,);///vector 后面会输出 4个0
///插入的位置取决于指针的位置
for(it=v.begin();it != v.end(); it++)///遍历元素
{
cout<<*it<<endl;
}
}

2、set和multiset

set顾名思义就是集合,里面没有重复的元素;但multiset可以有重复的元素,并且能够自动的从小到大排序

常用操作如下:

  • 大小、判空

    • s.size()  返回元素个数
    • s.empty()  判断是否为空
  • 增加、删除函数
    • s.insert()  向集合内插入元素
    • s.erase()  删除集合内有确定值的元素
  • 迭代器
    • iterator insert(iterator it,x):在迭代器it处插入元素x
    • iterator erase(iterator it):删除迭代器指针it处元素
    • iterator erase(iterator first,iterator last):删除[first, last)之间元素
    • iterator begin():返回首元素的迭代器指针
    • iterator end():返回尾元素的迭代器指针   
    • reverse_iterator rbegin():返回尾元素的逆向迭代器指针 (即最后一个)  
    • reverse_iterator rend():返回首元素前一个位置的迭代器指针

示例

为了更好的展示STL中的这个功能,我打算在这里放一道题

UVa 11136  

题目大意:超市抽奖,找到每天消费最多的和消费最少的,拿出来给他们奖励,奖励就是消费之差。

下面是代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
long long maxx,minn,sum; ///根据题目要求要用long long
int k,p,q;
multiset<int >s;
int n;
while(scanf("%d",&n) && n)
{
sum=;
s.clear();///在一次开始之前需要清空multiset
cin>>k;
while(k--)
{
cin>>p;
for(int i=;i<p;i++)
{
cin>>q;
s.insert(q);///multiset的插入操作
}
///multiset 自动排序
minn=*(s.begin()); ///找到最小的(可以重复)
maxx=*(s.rbegin()); ///反序查找第一个,也就是最后一个
///s.end() 表示的是最后一个的下一个 sum+= maxx-minn; s.erase(s.find(maxx)); ///s.erase() 括号里面若是值,会把所有相同重复的都删掉
s.erase(s.find(minn)); ///s.find () 若有,只返回一个值
}
cout<<sum<<endl;
}
}

---恢复内容开始---

C++ STL 与ACM竞赛相关的应用

1、vector

vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组。

常用操作如下:

  • 容量

    • vec.size()    向量大小
    • vec.empty()  向量判空 (如果为空==true、不为空==false)
  • 修改
    • vec.push_back()   向向量末尾添加一个元素
    • vec.pop_back()   删除向量末尾元素
    • vec.insert()     向向量中任意位置插入元素
    • vec.erase()    删除任意位置元素
    • vec.swap(,)    交换任意两个位置的向量
    • vec.clear()    清空向量元素
  • 迭代器
    • vec.begin()    开始指针
    • vec.end()    末尾指针
  • 元素访问
    • vec[1],vec[2]   下标直接访问
    • vec.front()    访问第一个元素
    • vec.back()    访问最后一个元素

示例:

#include <bits/stdc++.h>
using namespace std; vector<int>v;///声明部分
int main()
{
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();
v.push_back();///插入元素
if(!v.empty())///判断是否为空
{
v.pop_back();///3 出
v.pop_back();///1 出
v.pop_back();///2 出
}
///迭代器的用法
vector <int> :: iterator it;
for(it=v.begin();it != v.end(); it++)///遍历元素
{
cout<<*it<<endl;
}
v.insert(it,,);///vector 后面会输出 4个0
///插入的位置取决于指针的位置
for(it=v.begin();it != v.end(); it++)///遍历元素
{
cout<<*it<<endl;
}
}

2、set和multiset

set顾名思义就是集合,里面没有重复的元素;但multiset可以有重复的元素,并且能够自动的从小到大排序

常用操作如下:

  • 大小、判空

    • s.size()  返回元素个数
    • s.empty()  判断是否为空
  • 增加、删除函数
    • s.insert()  向集合内插入元素
    • s.erase()  删除集合内有确定值的元素
  • 迭代器
    • iterator insert(iterator it,x):在迭代器it处插入元素x
    • iterator erase(iterator it):删除迭代器指针it处元素
    • iterator erase(iterator first,iterator last):删除[first, last)之间元素
    • iterator begin():返回首元素的迭代器指针
    • iterator end():返回尾元素的迭代器指针   
    • reverse_iterator rbegin():返回尾元素的逆向迭代器指针 (即最后一个)  
    • reverse_iterator rend():返回首元素前一个位置的迭代器指针

示例

为了更好的展示STL中的这个功能,我打算在这里放一道题

UVa 11136  

题目大意:超市抽奖,找到每天消费最多的和消费最少的,拿出来给他们奖励,奖励就是消费之差。

下面是代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
long long maxx,minn,sum; ///根据题目要求要用long long
int k,p,q;
multiset<int >s;
int n;
while(scanf("%d",&n) && n)
{
sum=;
s.clear();///在一次开始之前需要清空multiset
cin>>k;
while(k--)
{
cin>>p;
for(int i=;i<p;i++)
{
cin>>q;
s.insert(q);///multiset的插入操作
}
///multiset 自动排序
minn=*(s.begin()); ///找到最小的(可以重复)
maxx=*(s.rbegin()); ///反序查找第一个,也就是最后一个
///s.end() 表示的是最后一个的下一个 sum+= maxx-minn; s.erase(s.find(maxx)); ///s.erase() 括号里面若是值,会把所有相同重复的都删掉
s.erase(s.find(minn)); ///s.find () 若有,只返回一个值
}
cout<<sum<<endl;
}
}

知识点总结——STL相关(持续补充)的更多相关文章

  1. 利用redis实现分布式锁知识点总结及相关改进

    利用redis实现分布式锁知识点总结及相关改进 先上原文,本文只为总结及对相关内容的质疑并提出若干意见,原文内容更详细https://www.cnblogs.com/linjiqin/p/800383 ...

  2. [20190329]探究sql语句相关mutexes补充2.txt

    [20190329]探究sql语句相关mutexes补充2.txt --//昨天测试sql语句相关mutexes,看看如果出现多个子光标的情况. 1.环境:SCOTT@book> @ ver1P ...

  3. 侯捷STL学习(12)--STL相关内容hash+tuple

    layout: post title: 侯捷STL学习(12) date: 2017-08-01 tag: 侯捷STL --- 第四讲 STL相关的内容 Hash Function 将hash函数封装 ...

  4. phpstorm 工具使用技巧(持续补充中。。。)

    phpstorm 工具使用技巧(持续补充中...) 一.phpstorm大小写切换 1.选择要转换的目标字符串: //普通商家,普通折扣默认值'COMMON_DISCOUNT'=>10.00, ...

  5. CSS琐碎知识点(持续补充)

    一.字体单位,pt?px?em?rem? pt:磅,一种固定长度的绝对的度量单位,是能够使用测量设备测得的长度,印刷业上经常使用,一般用于页面打印排版. px:屏幕设备上能显示出的最小的一个物理点,这 ...

  6. HTML琐碎知识点(持续补充)

    一.table标签 <table> <thead> <tr> <th>111</th> </tr> </thead> ...

  7. 【转】APP被苹果App Store拒绝的N个原因(持续补充)

    作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. 1.程序有重大bug,程序不能启动,或者 ...

  8. 【转】C++ STL 相关的问题集合

    3.C++ STL中vector的相关问题:    (1).调用push_back时,其内部的内存分配是如何进行的?    (2).调用clear时,内部是如何具体实现的?若想将其内存释放,该如何操作 ...

  9. 前端知识点一HTML相关知识点

    1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层 分别是:HTML.CSS.JavaScript 作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaSc ...

随机推荐

  1. BUAAOO P1-P3 Expression Dirivation

    目录 1.问题描述 1.1.概念定义 7.程序度量 8.知识点笔记 1.运行 2.1.方法 2.2.检测相等性 2.3.空串与null串 2.4.使用StringBuilder构建字符串 2.5.使用 ...

  2. 工具类:mybatis中使用Threadlocal开启session及关闭session

    1.线程容器,给线程绑定一个Object 内容,后只要线程不变,可以随时取出. 1.1 改变线程,无法取出内容. final ThreadLocal threadLocal = new ThreadL ...

  3. python阅读目录

    一.python基础--列表.元祖.字典.集合 二.1231 三.12121

  4. flex 布局 实现电商网页菜单的多级分类展示

    用flex,实现多级菜单分类展示,这里记录一下,方便以后查阅. 效果展示如下: 跟上面floor的设计差不多,鼠标hover全部商品分类的时候,将下拉列表展示在指定区域,这个类似鼠标悬浮商品图片期待上 ...

  5. 神州数码策略路由(PBR)配置

    实验要求:掌握PBR配置的方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip address ...

  6. iview中,table组件在缩进时产生的bug。

    问题描述: 在父元素因为缩进的关系撑开时,table组件不会因为父元素的撑开而自适应,问题如图 解决办法:在父一级的组件中使用table {width: 100% !important},强制使表格宽 ...

  7. MongoDB慢查询性能分析

    最近,长期运营后的港台服出现一个问题,web充值很慢,用gm指令查询玩家信息也很慢.最后定位到MongoDB查询也很慢.   刚开始定位的时候,运营SA直接查指定的玩家,并反映很慢,就猜测是索引的问题 ...

  8. 图片合并成PDF,两个PDF的合并

    需求: 将多张手机照片合并成一个PDF,并于另一个成型PDF合并 过程: 使用全能扫描王处理一遍,拆剪掉多余部分,并提高亮度增加文字对比度 合并: 使用Faststone Capture合并图片即可. ...

  9. css ——行级元素与块级元素解析

    一 . 先说说二者的本质区别吧:        行级元素是可以和其他元素处于一行,不用必须另起一行.块级元素是每个块级元素都是独自占一行,其后的元素也只能另起一行,并不能两个元素共用一行. 二 .下面 ...

  10. html基础js

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...