数据结构-Vector
自定义Vector实现:
///////////////////////////////////////////////////////////////////////////////
//
// FileName : c2_vector.h
// Author : Jimmy Han
// Date : N.A v1
// : 2014/07/13 09:30 v2
//
///////////////////////////////////////////////////////////////////////////////
#include <cassert> template <class object>
class Vector {
public:
explicit Vector(int initsize = )
: _size(initsize), _capacity(initsize + SPARE_CAPACITY)
{_object = new object[_capacity];} Vector(const Vector &rhs) : _object(NULL)
{ operator=(rhs);} ~Vector()
{delete [] _object;} const Vector& operator=(const Vector &rhs)
{
if(this != &rhs)
{
delete [] _object;
_size = rhs._size;
_capacity = rhs._capacity; _object = new object[_capacity];
for(int k = ; k < _size; k++)
_object[k] = rhs._object[k];
}
return *this;
} void resize(int newSize)
{
if(newSize > _capacity)
reserve(newSize * + );
_size = newSize;
} void reserve(int newCapacity)
{
if(newCapacity < _size)
return; object *oldobject = _object;
_object = new object[newCapacity];
for (int n=; n<_size; n++)
_object[n] = oldobject[n];
delete [] oldobject;
_capacity = newCapacity;
} object& operator[](const int index)
{
assert(index >= && index < _size);
return _object[index];
} const object& operator[](const int index) const
{
assert(index >= && index < _size);
return _object[index];
} bool empty() const
{return _size == ;} int size() const
{return _size;} int capacity() const
{return _capacity;} void push_back(const object &x)
{
if(_size == _capacity)
reserve(*_capacity + );
_object[_size++] = x;
} void pop_back()
{_size--;} const object& back() const
{ return _object[_size - ];} typedef object* iterator ;
typedef const object* const_iterator; iterator begin()
{return &_object[];} iterator end()
{return &_object[_size];} const_iterator begin() const
{return &_object[];} const_iterator end() const
{return &_object[_size];} enum{ SPARE_CAPACITY = };
private:
int _size;
int _capacity;
object *_object;
};
自定义Vector测试程序:
///////////////////////////////////////////////////////////////////////////////
//
// FileName : c2_vector.cpp
// Author : Jimmy Han
// Date : N.A v1
// : 2014/07/13 09:30 v2
// $ ./a.exe
// Calculate the size of self made Vector class
// sizeof(vint) is: 12 // Self made Vector size test:
// size of vint is: 5
// capacity of vint is: 7
// size of vint2 is: 8
// capacity of vint2 is: 17
// the last element of vint is: 4
// the 5 element of vint is: 4 // Self made iterator test:
// 0 1 2 3 // Iterator called by others:
// [0 1 2 3]
// [0 1 2 3 4 1919249516 1547322171 1735357008]
//
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "printCollection.h"
#include "c2_vector.h"
using namespace std;
int main()
{
//default constructor
Vector<int> vint;
Vector<int> vint2; //calc class size, two int, one pointer, so size is 12
cout << "Calculate the size of self made Vector class " << endl;
cout <<"sizeof(vint) is: " << sizeof(vint) << endl << endl; //void push_back(const object &x)
for (int n=0; n<5; n++)
vint.push_back(n); //const Vector& operator=(const Vector &rhs)
vint2 = vint; //void resize( int newSize)
vint2.resize(8); //int size(); int capacity();
cout << "Self made Vector size test: " << endl;
cout << "size of vint is: " << vint.size() << endl;
cout << "capacity of vint is: " << vint.capacity() << endl;
cout << "size of vint2 is: " << vint2.size() << endl;
cout << "capacity of vint2 is: " << vint2.capacity() << endl; //const object& back();
cout << "the last element of vint is: " << vint.back() << endl; //object& operator[](const int index)
cout << "the 5 element of vint is: " << vint[4] << endl << endl; //void pop_back()
vint.pop_back(); //typedef object* iterator; typedef const ojbect* const_iterator
//iterator begin(); iterator end();
cout << "Self made iterator test: " << endl;
for (Vector<int>::iterator iter = vint.begin(); iter != vint.end(); iter++)
{
cout << *iter << " ";
}
cout << endl << endl; cout << "Iterator called by others: " << endl;
printCollection(vint);
//after resize, not initilized member got random number
printCollection(vint2);
}
数据结构-Vector的更多相关文章
- 浅谈数据结构vector
vector: 又名 向量 1.C++中的一种数据结构. 2.是一个类. 3.相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. A.使用时, ...
- java数据结构-Vector
1 Vector基础实现为数组 object[] synchronized线程安全 2 扩容使用 System.arraycopy(original, 0, copy, 0,Math.min(ori ...
- Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
概要 学完ArrayList和LinkedList之后,我们接着学习Vector.学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它.第1部分 Vec ...
- Java 集合系列 05 Vector详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- C++ vector和list的区别
1.vector数据结构vector和数组类似,拥有一段连续的内存空间,并且起始地址不变.因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存 ...
- 转载:C++ vector 类学习笔记
声明:本文转载自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机 ...
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本号之前Cocos2d- ...
- JAVA核心技术I---JAVA基础知识(数据结构基础)
一:数组 (一)基本内容是与C一致的 (二)数组定义和初始化 (1)声明 int a[]; //a没有new操作,没有被分配内存,为null int[] b; //b没有new操作,没有被分配内存,为 ...
- java之vector详细介绍
1 vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口 ...
随机推荐
- Mysql插入数据的时候,中文乱码问题的解决
如果在Mysql中插入数据的时候,没有特定指定编码,可能会产生一系列的问题,例如,如果用insert语句的时候,可能提示incorrect values,等...究其原因,实际上无非是要让数据库和表中 ...
- Sqlserver_判断该路径是否存在该文件
declare @result int =0declare @path nvarchar(200)='d:\1.csv'execute master.dbo.xp_fileexist @path ,@ ...
- Css3_必备10个东西
1.边框圆角(Border Radiuas) 这个是我们在平常很常用的吧,以前我在用div圆角的时候,特别特别的痛苦,不管是用CSS来画圆角,还是用图片来画圆角都不那么容易,但是现在好了,在CSS3中 ...
- 在linux上使用"scp"命令拷贝一个目录到另一台服务器的时候报"not a regular file"错误的解决办法
今天在linux命令行使用scp命令拷贝一个目录到另一台服务器的时候,报如下错误: [root@hadoop01 ~]# scp flume -r hadoop02:/root/apps flume: ...
- map each 工具函数
工具函数 即全局性的函数作用主要是提供比如字符串,数组,对象等方面的遍历 字符串工具 $.trim(str) 去除字符串两边的空格 遍历机制 map函数(function (obj,index){ ...
- Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 排序、筛选、分页以及分组
Sorting, filtering, paging, and grouping 7 of 8 people found this helpful By Tom Dykstra The Contoso ...
- C#读写EXCEL
using System; using System.Collections; using System.Configuration; using System.Data; using System. ...
- 元素过滤器(Element Filters)
元素过滤器可以同选择器一起使用, 从一堆候选元素中进行筛选.它们当前仅使用于’name’元素选择器.过滤器看起来更像是选择器,也就是:filterType=argument所支持的元素过滤器为:val ...
- robotframework笔记3--如何编写好的测试用例使用机器人的框架
命名 测试套件的名称 之后,你可能应该描述你的名字. 名称是从文件或目录名自动创建: 扩展了. 强调了转换空间. 如果名称都是小写,大写的单词是. 名称可以是比较长的,但是太长的名字不方便 文件系 ...
- 《javascript高级程序设计》 第23章 离线应用与客户端存储
23.1 离线检测23.2 应用缓存23.3 数据存储 23.3.1 Cookie 23.3.2 IE 用户数据 23.3.3 Web 存储机制 23.3.4 IndexedDB 23.1 离线检 ...