#include <iostream>
using namespace std; template<typename Object>
class Vector
{
private:
int theSize; //实际数据大小
int theCapacity; //实际容器容量大小
Object *objects; //基本数组
public:
enum { SPACE_CAPACITY = }; //默认容量大小 explicit Vector(int initSize = ) //单参数构造函数要用explicit()避免类型在后台转换
: theSize(initSize), theCapacity(initSize + SPACE_CAPACITY) {
objects = new Object[theCapacity];
}
Vector(const Vector& rhs) : objects(NULL) { //复制构造函数--调用operator=对已有的Vector进行复制
operator = (rhs);
}
~Vector() {
delete[] objects;
} const Vector& operator = (const Vector& rhs) //重载赋值运算符
{
if (this != &rhs) //避免复制自身--混淆检验
{
delete []objects; //删除旧的内存空间
theSize = rhs.size(); //生成同样的样本大小
theCapacity = rhs.theCapacity; //生成同样的容量大小 objects = new Object[capacity()]; //生成与所复制的Vector同样容量的新数组
for (int k = ; k < size(); k++)
objects[k] = rhs.objects[k];
}
return *this;
} void resize(int newSize)
{
if (newSize > theCapacity) //重置大小
reserve(newSize * + ); //新大小
theSize = newSize;
} void reserve(int newCapacity)
{
if (newCapacity < theSize) //至少和(样本大小)一样大
return; Object *oldArray = objects; //oldArray--用于复制旧数组内容
objects = new Object[newCapacity];
for (int k = ; k < theSize; k++)
objects[k] = oldArray[k]; theCapacity = newCapacity;
delete []oldArray;
} Object& operator[] (int index)
{
return objects[index];
}
const Object& operator[] (int index) const
{
return objects[index];
} bool empty() const {
return size() == ;
} int size() const {
return theSize;
}
int capacity() const {
return theCapacity;
}
void push_back(const Object& x) {
if (theSize == theCapacity)
reserve( * theCapacity + );
objects[theSize++] = x;
} void pop_back() {
theSize--;
}
const Object& back() const {
return objects[theSize - ];
} typedef Object *iterator;
typedef const Object *const_iterator; iterator begin() {
return &objects[];
}
const_iterator begin() const {
return &objects[];
}
iterator end() { //尾后的不存在的指针
return &objects[size()];
}
const_iterator end() const {
return &objects[size()];
}
}; int main()
{
Vector<int> test;
int data;
while (cin >> data)
{
test.push_back(data);
}
Vector<int>::iterator it;
for (it = test.begin(); it != test.end(); ++it)
cout << *it << " ";
cout << endl;
cout << "pop_one.....\n";
test.pop_back();
cout << test.back() << endl;
return ;
}

数据结构One_Vector(向量的简单实现)的更多相关文章

  1. 【数据结构】 Queue 的简单实现

    [数据结构] Queue 的简单实现 public class XQueue<T> { /// <summary> /// 第一个元素 /// </summary> ...

  2. javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现

    线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...

  3. 站在JAVA数据结构的视角看待简单表结构

    1.前言: 我们提到程序中的集合的时候,往往脑海中会浮现出, 如ArrayList和LinkedList以及和HashMap.当然在提到ArrayList和LinkedList的时候,我们大多数的人都 ...

  4. 从零开始学习R语言(一)——数据结构之“向量”(Vector)

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/59688569 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...

  5. 数据结构与算法——基数排序简单Java实现

    基数排序(radix sort)又称“桶子法”,在对多个正整数进行排序时可以使用.它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个). 基数排序使用 ...

  6. 【Java数据结构与算法】简单排序、二分查找和异或运算

    简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...

  7. PTA数据结构 习题2.1 简单计算器 (20分)

    习题2.1 简单计算器 (20分) 模拟简单运算器的工作.假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算. 输入格式: 输入在一行中给出一个四则运算 ...

  8. R的数据结构--向量

    向量:用于存储数值型.字符型或逻辑型数据的一维数组,只可以包含一种数据 向量的创建与运算 创建向量 # 创建简单向量 l <- c(2, 2, 1, 3, 8) # [1] 2 2 1 3 8 ...

  9. 自己动手实现java数据结构(二) 链表

    1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...

随机推荐

  1. VMware 关闭虚拟机 Ubuntu 12 的 3D 效果,提高性能

    Ubuntu 2012,有 2D 和 3D 的渲染效果,但是 在虚拟机中,开启 3D 效果后,特别卡.好在 VMware 中有个“关闭3D”的开关,如下图所示: 去掉勾选“加速 3D 图形”

  2. C#网络爬虫 WebUtility使用 转义字符 urlCode

    背景: 在C#写网络爬虫时候,有时候需要将html中的转义字符进行处理,还有网址中的中文处理 一.html转义字符处理 1.ASP.NET中的html解析 HttpUtility.HtmlDecode ...

  3. Android开发学习笔记--计时器的应用实例

    为了了解安卓计时器的用法,写了一个秒表的应用,正是这个秒表,让我对Android应用的速度大跌眼镜,我设置了一个计时器,10ms更新一次显示的时间,然后更标准的时间一比较发现,跑10s就有一秒的时间误 ...

  4. 水面shader 线性擦除

    // Upgrade NOTE: replaced 'PositionFog()' with multiply of UNITY_MATRIX_MVP by position // Upgrade N ...

  5. 安装ssh服务

    1.先更新下源 sudo apt-get update 2.安装ssh服务 sudo apt-get openssh-server 3.配置ssh-server,配置文件位于/etc/ssh/sshd ...

  6. CI基本配置

    <?php defined('BASEPATH') OR exit('No direct script access allowed'); /* |----------------------- ...

  7. python查找并删除相同文件-UNIQ File-script版本

    今天用wxPython做了一个GUI程序,实现查找指定目录内的相同文件,主要原理是计算文件的md5值(计算前先找出文件大小相同的文件,然后计算这些文件的md5值,而不是所有文件都计算,大大减少了md5 ...

  8. 2017/1/7 学习笔记 jar包,maven

    ① 关于tar,jar,war文件 tar是通用的另一种打包格式,为了部署到服务器时方便. jar是java app server识别的java部署格式,其实是Zip文件,只是内部的文件有规范. wa ...

  9. 【leetcode】Maximum Subarray

    Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...

  10. POJ 2559

    http://poj.org/problem?id=2559 题意:就是找出可以完整连接的最大的矩形面积. 思路:找出单独的一块矩形,往两边延伸,记录两边的比他高的矩形是在哪个位置,然后最右的位置减去 ...