功能:

  1. 已重载[]运算符
  2. 已重载+运算符(合并)
  3. 已重载+=运算符
  4. 已重载构造函数
  5. clear()
  6. it() 以std::vector形式返回自身
  7. print(char=' ',char='\n') 输出,第一个参数为分隔符,第二个参数为结束符
  8. count(x) 查找x的出现次数
  9. find(x) 判断x是否出现,是返回1,否则返回0
  10. empty() 判断当前是否为空
  11. size() 返回当前元素个数
  12. lower_bound(x) 查找第一个大于等于x的位置,返回其下标
  13. upper_bound(x) 查找第一个大于x的位置,返回其下标
  14. insert(x) 插入一个元素x
  15. remove(x) 删除一个等于x的元素,未找到则不执行
  16. remove_all(x) 删除所有等于x的元素
  17. remove_smaller(x,bool=false) 删除全部小于x的元素 (bool=true 时为小于等于)
  18. remove_larger(x,bool=false) 删除全部大于x的元素 (bool=true 时为大于等于)
  19. findpre(x) 寻找小于x的最近元素,返回其下标,或者返回-1
  20. findnext(x) 寻找大于x的最近元素,返回其下标,或者返回-1
  21. nearestabs(x) 寻找x与当前所有元素之差的最小值,不存在则返回0
  22. remove_nearestabs(x) 寻找x与当前所有元素之差的最小值,并将其删除,不存在则返回0
  23. locate_nearestabs(x) 寻找x与当前所有元素之差的最小值,返回其下标,或者返回-1
  24. find_maxnum(x) 寻找第x大的数,返回其值,或者返回-1
  25. find_minnum(x) 寻找第x小的数,返回其值,或者返回-1

定义:

ordered_vector<int> a;
ordered_vector<int> b();
ordered_vector<int> c({1,2,3,3,4,5,6,7});
ordered_vector<int> d({});
std::vector<int> s{1,2,3,4,5};
ordered_vector<int> d(s);

代码:

#include<bits/stdc++.h>
using namespace std;
namespace hdk{
template<typename T>
class ordered_vector{
private:
std::vector<T>v;
inline void push_back(T x){
v.push_back(x);
}
public:
ordered_vector(vector<T> x={}){
v=x;
}
inline void clear(){
v.clear();
}
inline int lower_bound(T x){
int loc=std::lower_bound(v.begin(),v.end(),x)-v.begin();
return loc;
}
inline int upper_bound(T x){
int loc=std::upper_bound(v.begin(),v.end(),x)-v.begin();
return loc;
}
inline void insert(T x){
v.insert(v.begin()+lower_bound(x),x);
}
inline void remove(T x){
int pos=lower_bound(x);
if(pos!=v.size() and v[pos]==x) v.erase(v.begin()+pos);
}
inline void remove_all(T x){
while(1){
int pos=lower_bound(x);
if(pos==v.size()) break;
if(v[pos]!=x) break;
v.erase(v.begin()+pos);
}
}
inline std::vector<T> it(){
return v;
}
T operator [](int x){
if(x==-1) return -1;
return v[x];
}
inline void remove_larger(int x,bool include_this=false){
int pos=upper_bound(x);
for(int i=v.size()-1;i>=pos;--i){
v.erase(v.begin()+i);
}
if(include_this) remove_all(x);
}
inline void print(char devide=' ',char ending='\n'){
for(T i:v) cout<<i<<devide;
cout<<ending;
}
inline void remove_smaller(int x,bool include_this=false){
int pos=lower_bound(x);
for(int i=pos-1;i>=0;--i){
v.erase(v.begin()+i);
}
if(include_this) remove_all(x);
}
inline int findpre(T x){
int pos=lower_bound(x)-1;
if(pos<0) return -1;
return pos;
}
inline int findnext(T x){
int pos=upper_bound(x);
if(pos>=v.size()) return -1;
return pos;
}
inline T nearestabs(T x){
int p=findpre(x),n=findnext(x),ans=0x7fffffff;
if(p>=0) ans=min(ans,x-v[p]);
if(n>=0) ans=min(ans,v[n]-x);
return ans;
}
inline T remove_nearestabs(T x){
if(v.empty()) return 0;
int p=findpre(x),n=findnext(x),ans=0x7fffffff;bool isp=0;
if(p>=0) if(x-v[p]<ans) ans=x-v[p],isp=1;
if(n>=0) if(v[n]-x<ans) ans=v[n]-x,isp=0;
if(isp) v.erase(v.begin()+p);
else v.erase(v.begin()+n);
return ans;
}
inline int locate_nearestabs(T x){
if(v.empty()) return -1;
int p=findpre(x),n=findnext(x),ans=0x7fffffff;bool isp=0;
if(p>=0) if(x-v[p]<ans) ans=x-v[p],isp=1;
if(n>=0) if(v[n]-x<ans) ans=v[n]-x,isp=0;
if(isp) return p;
else return n;
}
inline int count(T x){
int b=lower_bound(x),e=upper_bound(x);
return e-b;
}
inline bool find(T x){
return count(x);
}
inline bool empty(){
return v.empty();
}
inline int size(){
return v.size();
}
inline int find_maxnum(int rank){
if(rank>v.size() or rank<1) return -1;
return v[v.size()-rank];
}
inline int find_minnum(int rank){
if(rank>v.size() or rank<1) return -1;
return v[rank-1];
}
ordered_vector<T> operator +(ordered_vector<T> x){
ordered_vector<T> ans;
int i=0,j=0;
while(i<size() and j<x.size()){
if(v[i]<x[j]){
ans.push_back(v[i]);
i++;
}
else{
ans.push_back(x[j]);
j++;
}
}
while(i<size()){
ans.push_back(v[i]);
i++;
}
while(j<x.size()){
ans.push_back(x[j]);
j++;
}
return ans;
}
void operator +=(ordered_vector<T> x){
*this=(*this)+x;
}
};
}
using namespace hdk;

[namespace hdk] ordered_vector的更多相关文章

  1. springcloud必知功能使用教程

    springcloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路 ...

  2. 理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  3. C++ namespace

    namespace, 命名空间, 用于解决命名冲突的问题. Python中的package/module, Javascript中的object, Java中的package都具有这样的功能. 如何使 ...

  4. C++ 之namespace常见用法

    一.背景 需要使用Visual studio的C++,此篇对namespace的常用用法做个记录. 二.正文 namespace通常用来给类或者函数做个区间定义,以使编译器能准确定位到适合的类或者函数 ...

  5. using namespace std 和 using std::cin

    相较using std::cin使用using namespace std不会使得程序的效率变低,或者稳定性降低,只是这样作会将很多的名字引入程序,使得程序员使用的名字集合变小,容易引起命名冲突. 在 ...

  6. Why Namespace? - 每天5分钟玩转 OpenStack(102)

    上一节我们讨论了 Neutron 将虚拟 router 放置到 namespace 中实现了不同 subnet 之间的路由.今天探讨为什么要用 namespace 封装 router? 回顾一下前面的 ...

  7. struts2中错误There is no Action mapped for namespace [/] and action name [] associated with context path

    1 There is no Action mapped for namespace [/] and action name [] associated with context path [/Stru ...

  8. PHP 命名空间(namespace)

    PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物. 不过在PHP当中还是有着相当重要的意义 ...

  9. AMD and CMD are dead之Why Namespace?

    缘由 当我看到_Franky兄的微博的时候: 我觉得我有必要出来详细说说KMDjs到底有什么本质上的优势了,连教主_Franky.貘吃馍香都不能理解他的好处,那么可想而知,在前端圈.或是全端圈.或是I ...

  10. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法

    这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces> <add namespace=" ...

随机推荐

  1. Vue 使用Use、prototype自定义全局插件

    Vue 使用Use.prototype自定义全局插件   by:授客 QQ:1033553122   开发环境   Win 10   node-v10.15.3-x64.msi 下载地址: https ...

  2. app备案证明需要提供md5值和公钥的解决方案

    现在app上架华为市场.小米市场.苹果市场等大型的应用商店,都需要提供国内的app备案证明.无论是安卓还是ios,都需要备案了. 但是问题是备案的时候需要填写app的bundle ID.公钥和MD5值 ...

  3. 大厂面经: 字节跳动 iOS开发实习生-飞书

    好家伙, 线上面试,总时长1h30mins左右 整体流程: 0.自我介绍(0-2mins) 1.做的比较难的事情(15min) 我讲我之前写的一个低开平台,写了一个撤销回退功能,提了个pr,用了节流, ...

  4. 【DataBase】MySQL 02 MySQL的配置详细

    参考至视频:P8 - P11部分 https://www.bilibili.com/video/BV1xW411u7ax 配置文件的介绍 最基本的只需要这三项就行了,演示的其他配置在新版都不支持了貌似 ...

  5. 【SpringCloud】Re03 Feign

    Feign是一个声明式的HttpClient?更简洁的实现Http请求发送 安装Feign组件: 配置Feign的依赖坐标: <?xml version="1.0" enco ...

  6. Human-centric Computing and Information Sciences期刊基本信息

    letpub 地址: https://www.letpub.com.cn/index.php?page=journalapp&view=detail&journalid=10450&a ...

  7. 代码随想录Day11

    150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式. 请你计算该表达式.返回一个表示表达式值的整数. 注意: 有效的算符为 '+'.'-'.' ...

  8. AtCoder Beginner Contest 312

    AtCoder Beginner Contest 312 A - Chord (atcoder.jp) #include <bits/stdc++.h> #define endl '\n' ...

  9. 【工程应用十一】基于PatchMatch算法的图像修复研究(inpaint)。

      这个东西是个非常古老的算法了,大概是2008年的东西,参考资料也有很多,不过基本上都是重复的.最近受一个朋友的需求,前后大概用了二十多天时间去研究,也有所成果,在这里简单的予以记录.    图像修 ...

  10. win10缺少SNMP服务解决办法

    一,以管理员的身份启动Powershell 第一步在win10系统任务栏上,点击搜索图标,输入"PowerShell",如下图所示: 2 第二步搜索到PowerShell之后,鼠标 ...