简单的 vector
#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的更多相关文章
- 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...
- 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 自己动手实现简单的Vector
看到今天,终于自己动手写了一个自己的vector,我这个版本的vector只有vector主要的一些操作,包括原版vector的所有构造函数,begin(),end(),size(),capacity ...
- C++中STL中简单的Vector的实现
该vector只能容纳标准库中string类, 直接上代码了,StrVec.h文件内容为: #ifndef STRVEC_H #define STRVEC_H #include<iostream ...
- vc++简单的vector动态数组实现
#ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...
- C++线性序列容器<vector>简单总结
C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...
- 线性表实现简单vector
实现一个简单的vector Vector基于数组实现,可以复制并且其占用的内存可以自动回收(通过析构函数),可以调整Vector的大小,以及容量(容量的改变是通过为基本数组分配一个新的内存块,然后复制 ...
随机推荐
- postman-7-前置请求脚本
前面讲了,tests初如何校验请求之后返回值是否正确 那前置脚本,就是处理,请求之前接口该如何处理,什么时候会用到呢? 比如:接口字段time,需要填入时间,而且这个是需要当前时间的,: 需要达到自动 ...
- Report.Net 本地数据库、WebService、Socket报表
本地.服务器的Access.Sql报表编辑.预览.打印. 可自定义预览界面,可方便嵌入到你的程序中去,提供接口函数,如有需要可自行添加接口. 预览采用单双面方式,因为如果页面过多,预览不能全部加载,所 ...
- day47 数据库进阶
目录 一.select查询扩展 1 几个重要关键字的执行顺序 2 where筛选条件 3 group by分组 4 having 分组之后的筛选条件 5 distinct去重 6 order by 排 ...
- 2020年Java基础高频面试题汇总(1.4W字详细解析,你能遇到的都在这了)
1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...
- 安装python包管理工具pip
安装步骤(必须已经安装过python) 1>curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 2>python get-pip ...
- 使用位运算、值交换等方式反转java字符串-共四种方法
在本文中,我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法. StringBuilder(str).reverse() char[]循环与值交换 byte循环与值交换 apa ...
- 手写简易SpringMVC
手写简易SpringMVC 手写系列框架代码基于普通Maven构建,因此在手写SpringMVC的过程中,需要手动的集成Tomcat容器 必备知识: Servlet相关理解和使用,Maven,Java ...
- java大数据最全课程学习笔记(3)--HDFS 简介及操作
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 HDFS 简介及操作 HDFS概述 HDFS产出背景及定义 HDFS优缺点 HDFS组成架构 HDFS文件块大小 ...
- Burp Suite Extender Module - 扩展模块
模块功能: 在扩展模块可以通过使用自定义代码,进行Burp 的自定义操作. 1. Burp Extensions页面 2. BApp Store中可以购买和安装别人写好的扩展功能 3. 在APIs界面 ...
- 想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...