简单的 vector

时间:2021-10-25 13:30:29
 #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&plus;&plus;】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

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

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

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

  6. C&plus;&plus;中STL中简单的Vector的实现

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

  7. vc&plus;&plus;简单的vector动态数组实现

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

  8. C&plus;&plus;线性序列容器&lt&semi;vector&gt&semi;简单总结

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

  9. 线性表实现简单vector

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

随机推荐

  1. ASP&period;NET Core 性能对比评测(ASP&period;NET,Python,Java,NodeJS)

    前言 性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检.比如我们在购买手机.显卡.CPU等的时候,可能会更加的关注于这样指标,所以本篇就来做一个性能评测. 性能也一 ...

  2. sql中NVARCHAR&lpar;MAX&rpar; 性能和占空间分析 varchar&lpar;n&rpar;&comma;nvarchar&lpar;n&rpar; 长度性能及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  3. &lowbar;&lowbar;delattr&lowbar;&lowbar;&bsol;&lowbar;&lowbar;delitem&lowbar;&lowbar;

    class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[ ...

  4. apscheduler 排程

    https://apscheduler.readthedocs.org/en/v2.1.2/cronschedule.html 参数 说明 year 4位年 month 月份1-12 day 日:1- ...

  5. form表单提交过程

    本文为转载文章! 今天,我将站在HTML和单纯的Asp.net框架的角度来解释它们的工作方式,因此,本文不演示WebForms服务器控件的相关内容. 简单的表单,简单的处理方式 好了,让我们进入今天的 ...

  6. CSS 实现流布局以及多列混合布局

    基本流布局 <!DOCTYPE html > <html> <head> <meta charset="utf-8"> <ti ...

  7. JavaScript ES6中export及export default的区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  8. 2015-10-28 C&num;4

    五.继承 5.1 父类又称(基类,超类)是被继承的类,子类又称派生类. 5.2 A:B,A就叫子类,B叫父类,B里面所有的成员(字段,方法)都会被A继承. B里面的私有成员,A也是继承下来了的,只是没 ...

  9. git使用方法----如何利用git管理代码?如何使用git将代码传到github中去

    ##  在文件夹中打开 git here; 1.git init ===初始化一个仓库(这个仓库会存放,git对我们代码进行备份的文件)2.配置个人信息 -- --在git中设置当前使用的用户是==( ...

  10. linux 内核中一个全局变量引发的性能问题

    为了调试一个功能,在一个内核模块中,增加了一个全局变量,用来统计自有skb池的申请情况. 因为是临时增加,所以没有考虑性能,一开始只是一个fail的统计,数量不多,也不太考虑是否有计数丢失的情况,毕竟 ...