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. DML DDL

    DDL 1.SQL分为5大类: DDL:数据定义语言 DCL:数据控制语言 DML:数据操纵语言 DTL:数据事务语言 DQL:数据查询语言 2.DDL(data definition languag ...

  2. Java 判断字符串能否转化为数字的三种方法

    用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (! ...

  3. 用delegate实现.NET应用程序的同步函数的异步调用-.NET多线程编程实践之一

    在C++中有2种类型的线程:UI Thread和Worker Thread,前者是基于用户界面的有消息循环的线程.后者是没有用户界面的侧重于大时空运算的线程.直接调用Windows相关线程及同步对象的 ...

  4. verilog选择数据类型时常犯的错误

    •    信号可以分为端口信号和内部信号.出现在端口列表中的信号是端口信号,其它的信号为内部信号. •    对于端口信号,输入端口只能是net类型.输出端口可以是net类型,也可以是register ...

  5. spring boot学习笔记2

    开场知识: spring 容器注入bean,时容器初始化的一些接口以及接口调用的时间先后顺序: 1)BeanFactoryPostProcessor 容器初始化的回调方法 * BeanFactoryP ...

  6. Objective-C与Swift混编

    1,创建项目(比如你先选择Objective-C) 2,项目创建成功后接着创建一个swift类  3,Xcode会弹出提示框问你需不需要创建桥接文件(桥接文件的名称默认为:项目名称-Bridging- ...

  7. Dnsmasq安装与配置-搭建本地DNS服务器

    默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...

  8. Kali Linux渗透测试实战 1.4 小试牛刀

    目录 1.4 小试牛刀 1.4.1 信息搜集 whois查询 服务指纹识别 端口扫描 综合性扫描 1.4.2 发现漏洞 1.4.3 攻击与权限维持 小结 1.4 小试牛刀 本节作为第一章的最后一节,给 ...

  9. C# 一些代码小结--UI操作

    C# 一些代码小结--UI操作 使用控件名调用控件 object obj = this.GetType().GetField("控件名", System.Reflection.Bi ...

  10. 自定义WPF窗体形状

    介绍 你好WPF爱好者. 随着WPF等统一API语言的发明,丰富用户界面变得非常容易. 创建丰富的用户界面只是一个想法. 您需要拥有的是创造性思维和最新技术融合. WPF和Expression Ble ...