vector类的简单实现

 #include <vector>
#include <iostream>
#include <cstring>
#include <cassert>
using namespace std; template<typename T>
class MyVector{
private:
const size_t WALK_LENGTH = ; T* _array;
size_t _size;
size_t _capacity;
public:
MyVector():_array(nullptr),_size(),_capacity(){} MyVector(size_t n,T value = ){
_capacity = WALK_LENGTH;
while(n > _capacity){
_capacity += WALK_LENGTH;
}
_array = new T[_capacity];
_size = n;
while(n--){
_array[n] = value;
}
} MyVector(const MyVector<T>& other){
this->_size = other._size;
this->_capacity = other._size;
this->_array = new T[_capacity];
memcpy(_array,other._array,sizeof(T)*_capacity);
} ~MyVector(){
if(this->_array){
delete [] this->_array;
}
} MyVector<T>& operator=(const MyVector& other){
if(this == &other){
return *this;
}
if(this->_array){
delete [] _array;
}
this->_array = new T[other._capacity];
this->_capacity = other._capacity;
this->_size = other._size;
memcpy(this->_array,other._array,_capacity*sizeof(T));
return *this;
} T operator[](size_t index){
assert(index < this->_size);
return _array[index];
} size_t size(){
return this->_size;
}
size_t capacity(){
return this->_capacity;
}
bool isEmpty(){
return this->_size == ;
} void push_back(const T& t){
if(this->_size == this->_capacity){
T* tmp = this->_array;
this->_array = new T[_capacity+WALK_LENGTH];
memcpy(this->_array,tmp,this->_size*sizeof(T));
this->_capacity += WALK_LENGTH;
delete [] tmp;
} this->_size += ;
_array[_size -] = t;
} void insert(size_t pos,const T& t){
assert(pos <= _size); if(_size == _capacity){
_capacity += WALK_LENGTH;
T* tmp = _array;
_array = new T[_capacity];
memcpy(_array,tmp,sizeof(T)*_size);
delete [] tmp;
}
for(size_t i = _size-;i>=pos;i--){
_array[i+] = _array[i];
}
_array[pos] = t;
_size += ;
} void erase(size_t pos){
assert(pos < _size); for(size_t i=pos+;i<_size;i++){
_array[i-] = _array[i];
}
_size--;
}
}; int main(){
MyVector<int> v();
v.push_back();
v.push_back();
v.insert(,);
v.erase();
std::cout << v[] << std::endl;
std::cout << v.capacity() << std::endl;
std::cout << v.size() << std::endl;
for(size_t i=;i<v.size();i++){
std::cout << v[i] << ",";
}
std::cout << std::endl;
return ;
}

面试:vector类的简单实现的更多相关文章

  1. C++中的Point类与vector类的简单处理

    首先设计Vector与Point的表示方法,再依次完善两个类中的构造函数,复制构造函数等. 向量由两个点表示,当进行运算的时候,转化起点坐标为(0,0): 第14行:由于Vector需要用到Point ...

  2. Support Vector Machine (1) : 简单SVM原理

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  3. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

  4. 转载:C++ vector 类学习笔记

    声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...

  5. 谈一谈Vector类

    一.关于Vector类的注意事项 1.从 Java 2 平台 v1.2 开始,vector类改进为实现 List 接口,成为 Java Collections Framework 的成员:所以vect ...

  6. 【stanford C++】容器III——Vector类

    主要介绍如下5个容器类——Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...

  7. C++ vector类详解

    转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...

  8. 【java】学习路径25-ArrayList类,Vector类,LinkedList类的使用和区别,Iterator迭代器的使用

    ArrayList的使用 ArrayList类:可变化长度的数组. 与一般的数组不同的是,其长度不固定,可以添加任意类型的数据. 也可以添加不同类型的数据,但是一般不这么做. ArrayList类位于 ...

  9. DataAccess通用数据库访问类,简单易用,功能强悍

    以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...

随机推荐

  1. spring-数据库操作组件的实现

    Ok,今天看了下spring数据库组件实现的源码,简要的做下笔记. 首先是JdbcTemplate,其实这个技术的实现很简单,就是一个模板类,把执行sql的主干流程都写好了,比如connection的 ...

  2. shell 命令之 crontab

    crontab是shell命令中的定时任务: crontab -e 进入当前定时任务的vim页面 每行是一个独立的定时脚本,使用和vim的语法部署定时任务 如下图: 脚本执行周期设置 可以用下面的网页 ...

  3. hive 桶表

    转自:https://blog.csdn.net/csdnliuxin123524/article/details/81052974 桶表(bucket table): 原理: 分区表是按照经常查询的 ...

  4. rsync+sersync+inotify实现服务器间文件同步之一

    rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置 2013年12月14日 ⁄ Linux管理, 服务器集群技术 ⁄ 共 4925字 ⁄ rsync+sersync ...

  5. unigui session超时时间设置

    unigui session超时时间设置 默认的SESSION超时时间是10分钟. 网络 SOCKET 程序,像 数据库,中间件,UNIGUI等...为了防止过多的僵死连接卡死服务端,服务端都会主动踢 ...

  6. WPF如何设置Image.Source为资源图片

    img.Source = new BitmapImage(new Uri(path,UriKind.RelativeOrAbsolute));

  7. MySQL--REPALCE INTO操作

    REPLACE INTO语法是MySQL数据库独特的扩展语法,可以提供“不存在即插入,存在即更新”的操作,MySQL官方文档解析其算法为: 1.尝试进行INSER 操作 2.如果INSERT 失败,则 ...

  8. ServiceStack DateTime数据类型转Json出现的困扰

    执行dotnet-new selfhost sstest 创建项目,然后打开解决方案 修改ssTest.ServiceModel中的Hello.cs,在HellopResponse中添加时间属性,然后 ...

  9. AEAI DP创建弹窗

    1 背景概述 在平时我们浏览页面时,经常会看见这样的应用情景,点击某个按钮或点击某个页面区域时,会弹出一个浮动窗口,像这类的功能,在一些开发的项目中很常见,笔者发现使用AEAI DP应用开发平台可以很 ...

  10. adb shell pm list packages的用法

    abd shell pm list packages     ####查看当前连接设备或者虚拟机的所有包 adb shell pm list packages -d    #####只输出禁用的包. ...