数组向量

//
// Created by yinus on 2016/4/2.
//
#ifndef DS_AA_VECTOR_H
#define DS_AA_VECTOR_H
#include<algorithm>
template <typename Object>
class Vector {
private:
    int theSize;
    int theCapacity;
    Object *objects;
public:
    static const int SPARE_CAPACITY=16;
    explicit Vector(int initSize=0):theSize(initSize),theCapacity(initSize+SPARE_CAPACITY){ objects=new Object[theCapacity];}
    Vector(const Vector& rhs):theSize(rhs.theSize),theCapacity(rhs.theCapacity),objects(nullptr){
        objects=new Object[theCapacity];
        for (int i = 0; i < theSize; ++i)
            objects[i]=rhs.objects[i];
    }

    Vector & operator=(const Vector &rhs){
        Vector copy=rhs;
        std::swap(*this,copy);
        return *this;
    }

    ~Vector(){delete []objects;}

    Vector(Vector &&rhs):theSize(rhs.theSize),theCapacity(rhs.theCapacity),objects(rhs.objects){
        rhs.objects= nullptr;
        rhs.theSize=0;
        rhs.theCapacity=0;
    }

    Vector& operator=(Vector &rhs){
        std::swap(theSize,rhs.theSize);
        std::swap(theCapacity,rhs.theCapacity);
        std::swap(objects,rhs.objects);
        return *this;
    }

    void resize(int newSize){
        if (newSize>theCapacity)
            reverse(newSize*2);
        theSize=newSize;
    }

    void reverse(int newCapacity){
        if (newCapacity<theSize)
            return;
        Object *newArray = new Object[newCapacity];
        for (int i = 0; i < theSize; ++i)
            newArray[i]=std::move(objects[i]);
        theCapacity=newCapacity;
        std::swap(objects,newArray);
        delete [] newArray;
    }

    Object &operator[](int index){
        return objects[index];
    }

    const Object &operator[](int index) const{
        return objects[index];
    }

    bool empty(){
        return size()==0;
    }

    int size() const {
        return theSize;
    }

    int capaticy(){
        return theCapacity;
    }

    void push_back(const Object &x){
        if (theSize==theCapacity)
            reverse(2*theCapacity+1);
        objects[theSize++]=x;
    }

    void push_back(Object &&x){
        if (theSize==theCapacity)
            reverse(theCapacity*2+1);
        objects[theSize++]=std::move(x);
    }

    void pop_back(){
        --theSize;
    }

    const Object &back() const{
        return objects[theSize-1];
    }

    typedef Object* iterator;
    typedef const Object* const_iterator;

    iterator begin(){
        return &objects[0];
    }

    const_iterator begin()const {
        return &objects[0];
    }

    iterator end(){
        return &objects[size()];
    }

    const_iterator end() const{
        return &objects[size()];
    }

};
#endif //DS_AA_VECTOR_H

  

时间: 2024-11-10 13:53:31

数组向量的相关文章

矩阵操作(数据,数组向量,表格)

一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间用”;”(或回车符)隔开: A=[1 2 3 4 5; 12 12 14 56 657; 23 46 34 67 56 ]; d.矩阵的元素可以是数值.变量.表达式或函数: e.矩阵的尺寸不必预先定义. 二,矩阵的创建: 1.直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则.建立向量的时候可以利用冒号表达式

vector代替数组

vector代替数组 1.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除). 2.用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector <int *> a.同理想用向量代替三维数组也是一样,vector <int**>a;再往上面依此类推. 下面是另外一种vector代替二维数组的方

线性代数笔记(向量)

1)数量:又叫标量,纯量,只有大小没有方向,可以用一个数值来确定:2)向量:又名矢量,描述这类量不仅需要大小,还需要表达其方向:3)有向线段:具有一定长度和确定方向的线段:4)几何向量:简称向量,用有向线段表示的向量称几何向量:5)固定向量,自由向量:起点是否固定来区分,起点固定的叫固定向量,起点不固定的叫自由向量:6)向量相等:大小和方向都相同:7)负向量:大小相同,方向相反:8)模:也叫范数,为向量的大小:||a||9)单位向量:模为1的向量:10)零向量:大小(长度)为0的向量,其起点和终

HLSL的基础语法

HLSL的基本语法 1 数据类型 1.1   标量类型 1. bool: True or false .Note that the HLSL provides the true and false keywordslike in C++. 2. int: 32-bit signedinteger. 3. half: 16-bit-floatingpoint number. 4. float: 32-bit-floatingpoint number. 5. double: 64-bit-float

C++:vector的用法详解(转载)

原文地址:http://blog.csdn.net/hancunai0017/article/details/7032383 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.变量声明: 2.1 例:

C++ vector解析 (C++ 11)

本文在我另外一个博客也同步:http://www.cnblogs.com/pengjunwei/p/4414677.html Vector表示可以改变大小的数组容器. 就像数组,其元素的向量使用连续的存储位置,这意味着还可以访问其元素上使用偏移量经常指向元素的指针,和在数组中一样有效.但与数组不同,其大小可动态变化,他们的存储容器自动处理. 在vector内部,使用动态分配的数组向量来存储他们的内容.此数组可能需要重新分配,以便规模的扩大新元素被插入时,这意味着为它分配一个新的数组,并将所有元素

Python 主成分分析PCA

主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维.去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元,是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关. 相关知识 介绍一个PCA的教程:A tutorial on Principal Components Analysis ——Lindsay I Smith 1.协方差 Covariance 变量X和变量Y的协方差公式如下,协方差是描述不同变量之间的相关关系,协方差>0时说

R 语言的优劣势是什么?

R 语言的优劣势是什么? 2015-05-27 程序员 大数据小分析 R,不仅仅是一种语言 本文原载于<程序员>杂志2010年第8期,因篇幅所限,有所删减,这里刊登的是全文. 工欲善其事,必先利其器,作为一个战斗在IT界第一线的工程师,C/C++.java.perl.python.ruby.php.javascript.erlang等等等等,你手中总有一把使用自如的刀,帮助你披荆斩棘. 应用场景决定知识的储备与工具的选择,反过来,无论你选择了什么样的工具,你一定会努力地把它改造成符合自己应用场

matlab语言基础

(一)常用命令 清空命令窗口:clc 清空工作空间:clear 查看函数的帮助信息:help 函数名 (二)变量与常量 matlab中变量默认为double类型,即双精度,取值范围-10308~10308,拥有15到16位有效数字,占4个字节 matlab变量的命名是遵循一般编程语言规则的且大小写敏感,通常用小写字母配合数字表示变量,变量名字尽量要有意义 matlab默认保留了一个变量ans,若没有指定变量,则系统主动把值赋给ans matlab变量的初始化: 1.用赋值语句初始化变量 2.用i