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. [zjoi2010]cheese

    题目: 贪吃的老鼠(cheese.c/cpp/pas/in/out) 时限:每个测试点10秒 [问题描述] 奶酪店里最近出现了m只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉.奶酪店中一天会生产n块 ...

  2. leetcode 152. 乘积最大子序列 java

    题目: 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. ...

  3. Python-使用PyQT生成图形界面

    1.安装PyQT5以及QT Designer工具包 pip install PyQt5 pip install PyQt5-tools -i http://pypi.douban.com/simple ...

  4. java的基本数据类型--四类八种

    java的数据类型 1.分为基本数据类型和引用数据类型 基本数据类型的分类:整数型: byte  占用一个字节 范围-128-127 short 占用两个字节  -2^15~2^15-1 int    ...

  5. CS231-Multi-calss SVM的求导

    接着上周的更,上周我们更到,在对图像的线性分类中,我们只用multi-class 的svm,然后我们得到以下的损失函数 这里每个数值代表为下: X 是一个 N by D 的矩阵,N 代表 traini ...

  6. GoLang学习控制语句之if/else

    if语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码. if condition { // do ...

  7. Dubbo原理实现之使用Javassist字节码结束构建代理对象

    JavassistProxyFactory利用自己吗技术构建代理对象的实现如下: public <T> T getProxy(Invoker<T> invoker, Class ...

  8. Liferay开发实战(2):Service Builder生成持久化层,及开发服务层

    本文Liferay适用版本:v6.2.ce-ga6版 Liferay的插件体系是:模型-视图-控制器的portlet MVC框架.MVC是一个伟大的用于Web应用程序的设计模式,在实际应用中还应处理持 ...

  9. MySQL高可用架构-MMM安装教程

    安装指南: 一.架构以及服务器信息 基本安装包含至少2个数据库服务器和1个监视服务器.本例中使用2个监视服务器和5个数据库服务器(服务器系统为CentOS 7) 用途 IP 主机名 Server-id ...

  10. 剑指offer二十之包含min函数的栈

    一.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.思路 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数.每次元素存入minSt ...