面试:vector类的简单实现
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类的简单实现的更多相关文章
- C++中的Point类与vector类的简单处理
首先设计Vector与Point的表示方法,再依次完善两个类中的构造函数,复制构造函数等. 向量由两个点表示,当进行运算的时候,转化起点坐标为(0,0): 第14行:由于Vector需要用到Point ...
- Support Vector Machine (1) : 简单SVM原理
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Java API —— ArrayList类 & Vector类 & LinkList类
1.ArrayList类 1)ArrayList类概述 · 底层数据结构是数组,查询快,增删慢 · 线程不安全,效率高 2)ArrayList案例 ...
- 转载:C++ vector 类学习笔记
声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...
- 谈一谈Vector类
一.关于Vector类的注意事项 1.从 Java 2 平台 v1.2 开始,vector类改进为实现 List 接口,成为 Java Collections Framework 的成员:所以vect ...
- 【stanford C++】容器III——Vector类
主要介绍如下5个容器类——Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...
- C++ vector类详解
转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...
- 【java】学习路径25-ArrayList类,Vector类,LinkedList类的使用和区别,Iterator迭代器的使用
ArrayList的使用 ArrayList类:可变化长度的数组. 与一般的数组不同的是,其长度不固定,可以添加任意类型的数据. 也可以添加不同类型的数据,但是一般不这么做. ArrayList类位于 ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
随机推荐
- (最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160
http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS (Java/Other ...
- 【20171101】the first day in a new company
英文差的要命还飙英文,擦嘞!!! 就是想记录下 点滴 如下配图: | | | V 手动配图这是图!!!
- output.php
<?php /** * */ class Output { function __construct() { $this->_zlib_oc = @ini_get('zlib.output ...
- QOpenGLFunctions的相关的使用(1)
QOpenGLFunctions的使用 1. QOpenGLFunctions 说明 QOpenGLFunctions 类提供了跨平台的OpenGl ES2.0 API版本. OpenGL 2. ...
- 关于FPGA的一些小见解
Xilinx FPGA配置bit流文件 Xilinx FPGA的供电是采用USB作为电源,使用Verilog HDL或VHDL实现的逻辑电路通过Xilinx的综合工具生成bit流文件,通过Digile ...
- ASP.NET Web API 框架研究 IoC容器 DependencyResolver
一.概念 1.IoC(Inversion of Control),控制反转 即将依赖对象的创建和维护交给一个外部容器来负责,而不是应用本身.如,在类型A中需要使用类型B的实例,而B的实例的创建不是由A ...
- iOS笔记之UIKit_UISlider/UIStepper/UISwitch
- (void)viewDidLoad { [super viewDidLoad]; self.sp = [[UIStepper alloc]init]; //设置计步器的位置 self.sp.cen ...
- EBS获取并发程序Trace File
http://blog.itpub.net/16832682/viewspace-1249765/ 最近因为项目上出现了PL/SQL性能的问题,因此需要对已经开发好的并发程序进行调优的工作.调优有个很 ...
- cxgrid动态生成footersummary 并获得值
cxgrid动态生成footersummary 并获得值 var f: TcxGridDBTableSummaryItem; cx_for_mctv.OptionsView.Footer := t ...
- [译]C#和.NET中的字符串
原文地址:Jon Skeet:Strings in C# and .NET System.String 类型(在C#语言中对应的别名是string)是.NET最重要的类型之一,不幸的是在它身上存在了太 ...