线性表实现简单vector
实现一个简单的vector
Vector基于数组实现,可以复制并且其占用的内存可以自动回收(通过析构函数),可以调整Vector的大小,以及容量(容量的改变是通过为基本数组分配一个新的内存块,然后复制旧的内存块到新块中,再释放旧块的内存)。在进行插入和删除操作时,需要位置标记,这里使用通用的迭代器(其实就是指针)。
代码如下:
/*
* 用数组的方式实现线性表
*/
#include<iostream>
using namespace std; template <typename Object>
class Vector
{
private:
int theSize;
int theCapacity;
Object * objects; public:
//构造函数
explicit Vector(int initSize = ) : theSize(initSize), theCapacity(initSize + SPACE_CAPACITY) {
objects = new Object[theCapacity];
} //拷贝构造函数
Vector(const Vector &rhs) :objects(NULL)
{
operator=(rhs);
} //析构函数
~Vector()
{
delete[] objects;
} //重载复制操作符
const Vector &operator=(const Vector &rhs)
{
if (this != rhs)
{
delete[] objects;
theSize = rhs.theSize;
theCapacity = rhs.theCapacity;
objects = new Object[capacity()];
for (int i = ; i < size();++i)
{
objects[i] = rhs.objects[i];
}
}
return *this;
} //调整Vector的大小
void resize(int newSize)
{
if (newSize > theCapacity)
{
reverse(newSize * + );
}
theSize = newSize;
} //调整容量
void reverse(int newCapacity)
{
if (newCapacity < theSize)
return;
Object *oldArray = objects;
objects = new Object[newCapacity];
for (int i = ; i < size(); ++i)
{
objects[i] = oldArray[i];
}
theCapacity = newCapacity;
delete[] oldArray;
} //重载取元素操作符[]
Object & operator[](int index)
{
return objects[index];
} //重载取元素操作符[] 返回值为左值不可修改
Object & operator[](int index) const
{
return objects[index];
} //判断是否为空
bool empty()
{
return theSize == ;
} //获得Vector的大小
int size() const
{
return theSize;
} //获得theCapacity的大小
int capacity() const
{
return theCapacity;
} //在尾部插入元素
void push_back(const Object &x)
{
if (theSize == theCapacity)
{
reverse( * theCapacity + );
}
objects[theSize++] = x;
} //弹出尾部元素
void pop_back()
{
theSize--;
} //返回尾部元素
const Object &back() const
{
return objects[theSize - ];
} //使用指针定义迭代器
typedef Object * itreator;
typedef const Object * const_itreator; //获取开始的迭代器
itreator begin()
{
return &objects[];
} const_itreator begin() const
{
return &objects[];
} //获取结束的迭代器
itreator end()
{
return &objects[size()];
} const_itreator end() const
{
return &objects[size()];
}
enum { SPACE_CAPACITY = };
}; int main()
{
Vector<int> vec;
vec.push_back();
vec.push_back();
for (auto it = vec.begin(); it != vec.end();++it)
{
cout << *it << ' ';
}
return ;
}
输出:

线性表实现简单vector的更多相关文章
- 使用类模板的C++线性表实现(数组方式)
main.h #ifndef _MAIN_H_ #define _MAIN_H_ #include <iostream> #include <exception> #inclu ...
- 图论——图的邻接表实现——Java语言(完整demo)
1.图的简单实现方法——邻接矩阵 表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法. 对于每条边(u,v),置A[u,v]等于true:否则 ...
- 动端逐渐出了许多的移动端的框架,比如Sencha Touch、JQTouch、Jquery-moblie、jqMobi等等。这些框架都有优缺点,不同的框架应用在不同的项目中。现简单阐述一下各框架的优缺点:
移动前端工作的那些事---前端制作之微信小技巧篇 (2013-11-15 15:20) 转载▼ 标签: it css3/javascript html5 webapp 手机网站搭建 分类: 前端制 ...
- hibernate之关于使用连接表实现多对一关联映射
[Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...
- DataStructure-链表实现指数非递减一元多项式的求和
// 2-链表实现多项式的求和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> #inclu ...
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...
- SpringSecurity结合数据库表实现权限认证
SpringSecurity结合数据表实现权限认证: 下面的案例是在SpringBoot框架实现的: 步骤一:准备数据库表 以下是五张表的脚本 ### 用户表 create table Sys_Use ...
- bootstrap table 父子表实现【无限级】菜单管理功能
bootstrap table 父子表实现[无限级]菜单管理功能 实现效果 前端代码 <%@ page language="java" import="java.u ...
- 【线性表基础】基于线性表的简单算法【Java版】
本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeR ...
随机推荐
- c语言实现动态指针数组Dynamic arrays
c语言实现动态数组.其它c的数据结构实现,hashTable參考点击打开链接 treeStruct參考点击打开链接 基本原理:事先准备好一个固定长度的数组. 假设长度不够的时候.realloc一块区域 ...
- Codeforces 475D CGCDSSQ 求序列中连续数字的GCD=K的对数
题目链接:点击打开链接 #include <cstdio> #include <cstring> #include <algorithm> #include < ...
- 136 - Ugly Numbers
Ugly Numbers Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3 ...
- [Android学习笔记]获取view的尺寸和坐标
对于UI方面很多时候需要获取它的很多信息,具体情况见view的文档 View文档 http://developer.android.com/training/index.html 常用方法:获取vie ...
- 计算机视觉与模式识别代码合集第二版one
Topic Name Reference code Feature Detection, Feature Extraction, and Action Recognition Space-Time I ...
- linux c socket 案源
service结束 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #inclu ...
- 访何红辉:谈谈Android源码中的设计模式
最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...
- onkeypress事件.onkeydown事件.onkeyup事件
onkeypress事件是在按键開始按的时候发生: onkeydown事件是在按键已经按下的时候发生: onkeyup事件是在按键松开(释放)的时候发生.
- Opencv246+vs2012生成不依赖编译环境的exe文件
我们都知道,vs2012编译项目有两个版本号:Debug和Release,这里我们在Release下生成exe文件,为什么要在Release以下生成呢,原因是你在Debug模式下生成的exe须要vs2 ...
- poj 2769 Reduced ID Numbers(memset使用技巧)
Description T. Chur teaches various groups of students at university U. Every U-student has a unique ...