#pragma once
#include <memory.h>
#include <stdlib.h>
#include <iostream>
using std::ostream;
using std::cout;
using std::endl;
class vector{
public :
vector();
~vector();
explicit vector(int size_);
vector(int size_,int e);
vector(const vector&a);
vector(int *data,int len);
vector& operator=(const vector&a);
vector(vector&&)=delete;
vector& operator=(vector&&)=delete; int size()const;
int capacity()const;
void reserve(int capacity_);
void resize(int size_);
int& operator[](int);
void insert(int pos,int x);//insert a new element before the position pos
void erase(int pos);//erase the element at the position pos;
void push_back(int x);//insert a new element at the end
void pop_back();//erase the last element
int& front();//return the first element
const int& front()const;
int& back();//return the last element
const int& back()const;
bool empty()const;//true if the size is 0
friend ostream& operator <<(ostream&os,const vector& a){
for(int i=;i<a._size;i++){
cout<<a.elems[i]<<" ";
}
cout<<endl;
return os;
} private:
int *elems;
int _size;
int _capacity;
bool _safePos(int a)const{
if(a<||a>_size-)return false;
else return true;
}
};
vector::vector(){
_size=;
_capacity=;
elems=nullptr;
}
vector::~vector(){
delete[] elems;
} vector::vector(int size_):_size(size_),_capacity(size_){
this->elems=new int[_capacity];
memset(this->elems,0x3f,_capacity*);
}
vector::vector(int size_, int e):_size(size_),_capacity(size_){
this->elems=new int[_capacity];
for(int i=;i<size_;i++){
this->elems[i]=e;
}
} vector::vector(const vector &a){
this->_size=a._size;
this->_capacity=a._capacity;
this->elems=new int[_capacity];
memcpy_s(this->elems,_capacity*,a.elems,_capacity*);
}
vector::vector(int *data, int len){
this->_capacity=len+len/;
this->_size=len;
this->elems=new int[_capacity];
memset(this->elems,0x3f,_capacity*);
memcpy_s(this->elems,_size*,data,len*);
}
vector& vector::operator =(const vector&a){
if(*this==a) return *this;
delete[] this->elems;
this->_size=a._size;
this->_capacity=a._capacity;
this->elems=new int[_capacity];
memcpy_s(this->elems,_capacity*,a.elems,_capacity*);
return *this;
}
int vector::size()const{
return this->_size;
}
int vector::capacity()const{
return this->_capacity;
}
void vector::reserve(int capacity_){
if(capacity_<=this->_capacity)return;
else{
this->_capacity=capacity_;
int *es=new int[_capacity];
memset(es,0x3f,_capacity*);
memcpy_s(es,_size*,elems,_size*);
delete[] elems;
this->elems=es;
}
}
void vector::resize(int size_){
if(size_<this->_size)this->_size=size_;
else if(size_<=this->_capacity){
while(this->_size<size_){
this->elems[this->_size++]=-;
}
}else if(size_>this->_capacity){
this->reserve(size_);
while(this->_size<this->_capacity){
this->elems[this->_size++]=-;
}
}
} int& vector::operator [](int p){
if(_safePos(p))
return this->elems[p];
exit();
}
void vector::insert(int pos, int x){
if(!_safePos(pos))exit();
if(this->_size==this->_capacity){
reserve(this->_capacity+this->_size/);
}
for(int j=this->_size;j>pos;j--){
this->elems[j]=this->elems[j-];
}
this->elems[pos-]=x;
}
void vector::erase(int pos){
if(!this->_safePos(pos))exit();
for(int i=pos;i<this->_size-;i++){
this->elems[i]=this->elems[i+];
}
this->_size-=;
}
void vector::push_back(int x){
if(this->_capacity==this->_size){
this->reserve(this->_capacity+this->_size/);
this->elems[this->_size++]=x;
}else{
this->elems[this->_size++]=x;
}
}
void vector::pop_back(){
if(!this->empty())
--this->_size;
}
int& vector::front(){
return const_cast<int&>(static_cast<const vector&>(*this).front());//把指针转成const型,调用下面一个。再将结果的转成非const
}
const int& vector::front() const{
return this->elems[];
}
int& vector::back(){
return const_cast<int&>(static_cast<const vector*>(this)->back());//这里试试两种不同的写法而已
}
const int& vector::back() const{
return this->elems[_size-];
}
bool vector::empty()const{
return _size==?true:false;
}

简单的 vector的更多相关文章

  1. 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...

  2. 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  3. 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  4. 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  5. 自己动手实现简单的Vector

    看到今天,终于自己动手写了一个自己的vector,我这个版本的vector只有vector主要的一些操作,包括原版vector的所有构造函数,begin(),end(),size(),capacity ...

  6. C++中STL中简单的Vector的实现

    该vector只能容纳标准库中string类, 直接上代码了,StrVec.h文件内容为: #ifndef STRVEC_H #define STRVEC_H #include<iostream ...

  7. vc++简单的vector动态数组实现

    #ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...

  8. C++线性序列容器<vector>简单总结

    C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...

  9. 线性表实现简单vector

    实现一个简单的vector Vector基于数组实现,可以复制并且其占用的内存可以自动回收(通过析构函数),可以调整Vector的大小,以及容量(容量的改变是通过为基本数组分配一个新的内存块,然后复制 ...

随机推荐

  1. Spring Boot读取配置文件的几种方式

    Spring Boot获取文件总的来说有三种方式,分别是@Value注解,@ConfigurationProperties注解和Environment接口.这三种注解可以配合着@PropertySou ...

  2. java的自定义配置文件统一读取配置类示例

    前言:在我们的日常编程中难免会有些我们自定义的配置,虽然Java中提供了很多的读取配置文件的方法,但是当我们需要修改配置文件的key的时候,就会发现太过散乱了,工作量也会很大,涉及的文件还很多,一不小 ...

  3. JVM 专题十八:垃圾回收(二)垃圾回收相关算法

    1. 标记阶段 1.1 引用计数算法 1.1.1 对象存活判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象.只有被标记为己 ...

  4. 数据可视化基础专题(十四):pyecharts 基础(一)简单上手

    1.引言 文档位于 https://pyecharts.org/#/zh-cn/intro 示例位于 https://gallery.pyecharts.org/#/README echarts 官网 ...

  5. 李航统计学习方法(第二版)(五):k 近邻算法简介

    1 简介 k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类.k近邻法假设给定一个训练数据集,其中的实例类别已定.分类时,对新的实例,根据其k个最近邻的训练实例的类别,通 ...

  6. 对掌机游戏Pokemon的一部分系统的拆解流程图

    整体系统拆解 POKEMON系统拆解 属性.技能.进化形态 属性提升系统 种族值说明: 所有Pokemon都拥有自己的种族的种族值,且固定(例如:小火龙:309, 皮卡丘: 320) 种族值是各项属性 ...

  7. ASP.NET Core3.1使用Identity Server4建立Authorization Server-2

    前言 建立Web Api项目 在同一个解决方案下建立一个Web Api项目IdentityServer4.WebApi,然后修改Web Api的launchSettings.json.参考第一节,当然 ...

  8. 将python3打包成为exe可执行文件(pyinstaller)

    我们工作中可能会遇到,客户需要一个爬虫或者其他什么功能的python脚本. 这个时候,如果我们直接把我们的python脚本发给客户,会有两个问题: 1.客户的电脑或者服务器可能并没有安装python环 ...

  9. 计算思维(Computational Thinking)在少儿编程中的体现

    本文主要针对少儿编程从业人员及正在学习编程的学生家长 大家好,我是C大叔,国内早期的少儿编程从业人员.一直以来都是在做scratch,JavaScript,python以及信息学奥赛C++的讲师,教研 ...

  10. 题解 洛谷 P2254 【[NOI2005]瑰丽华尔兹】

    发现在同一时间段中,滑动的方向具有唯一性,所以不难得出\(DP\)方程. \(f_{i,j}=max(f_{i,j},f_{i-dx_,j-dy}+dis_{i,j,i-dx_,j-dy})\) \( ...