最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)動(dòng)態(tài)線性表

 更新時(shí)間:2020年05月25日 10:14:54   作者:-yyqx-  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)動(dòng)態(tài)線性表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

之前在學(xué)習(xí)c語(yǔ)言的時(shí)候用c語(yǔ)言實(shí)現(xiàn)了動(dòng)態(tài)線性表?,F(xiàn)在再使用c++實(shí)現(xiàn)一下動(dòng)態(tài)線性表。

相關(guān)數(shù)據(jù)結(jié)構(gòu)方面就不多說了。在之前的博客里也有。下面就直接來(lái)實(shí)現(xiàn)吧。

這里使用指針來(lái)遍歷數(shù)組,這樣在算size,capacity的時(shí)候,直接用指針相減的方式就可以得到元素個(gè)數(shù),以及容量。

Vector.h

#include <iostream>
#include<assert.h>
#include<stdio.h>
#include<string.h>
//用typedef定義int為存儲(chǔ)類型,想更改直接更改這一句即可。
typedef int DataType;

class Vector
{
public:
  //構(gòu)造函數(shù)。
  Vector()
  {
    _first = new DataType[3];
    _finish = _first;
    _endofstorage = _first + 3;
  }
  //拷貝構(gòu)造
  Vector(const Vector& v)
  {
    _first = new DataType[v.Size()];
    memmove(_first, v._first, v.Size()*sizeof(DataType));
    _finish = _first + v.Size() ;
    _endofstorage = _finish ;
  }
  //賦值運(yùn)算符的重載
  Vector& operator=(Vector v);
  //析構(gòu)函數(shù)
  ~Vector()
  {
    delete[] _first;
  }
  //順序表的有效長(zhǎng)度
  size_t Size() const
  {
    return _finish - _first ;
  }
  //順序表的容量
  size_t Capacity() const
  {
    return _endofstorage - _first ;
  }
  //擴(kuò)容順序表
  void Expand(size_t n);
  //尾插
  void PushBack(DataType x);
  //截取容量
  void Reserve(size_t n);
  //尾刪
  void PopBack();
  //任意位置插入
  void Insert(size_t pos, DataType x);
  //任意位置刪除
  void Erase(size_t pos);
  //查找元素
  size_t Find(DataType x);
  //打印當(dāng)前順序表
  void Print();
private:
  //指向第一個(gè)元素的指針
  DataType* _first;
  //指向最后一個(gè)有效元素的下一個(gè)位置
  DataType* _finish;
  //順序表容量的下一個(gè)位置
  DataType* _endofstorage;
};

Vector.cpp

#include"Vector_List1.h"

  //賦值運(yùn)算符的重載可以使用傳值的方式進(jìn)行
  //在傳值的時(shí)候默認(rèn)調(diào)用了拷貝構(gòu)造函數(shù),進(jìn)行了深拷貝
  //而當(dāng)前這個(gè)傳入的v就是我們想要的賦值之后的結(jié)果
  //將當(dāng)前的順序表與順序表v一交換,就可以不用再自己實(shí)現(xiàn)深拷貝
  Vector& Vector::operator=(Vector v)
  {
    size_t size = v.Size();
    DataType *tmp = v._first;
    v._first = _first;
    _first = tmp;
    _finish = _first + size;
    _endofstorage = _finish;
    return *this;
  }
  void Vector::Expand(size_t n)
  {
    DataType *tmp = new DataType[n];
    size_t size = Size();
    memmove(tmp, _first, Size()*sizeof(DataType));
    delete[] _first;
    _first = tmp;
    _finish = _first + size;
    _endofstorage = _first + n;
  }
  void Vector::PushBack(DataType x)
  {
    if (_finish > _endofstorage)
      Expand(2 * Capacity());
    *_finish = x;
    _finish++;
  }
  void Vector::PopBack()
  {
    assert(_first < _finish);
    _finish--;
  }
  void Vector::Insert(size_t pos, DataType x)
  {
    assert(pos<Size());
    if(_finish >= _endofstorage)
      Expand(2*Capacity());
    memmove(_first+pos+1,_first+pos,Size()-pos+1);
    *(_first+pos) = x;
  }
  void Vector::Erase(size_t pos)
  {
    assert(pos<Size());
    memmove(_first+pos,_first+pos+1,(Size()-pos-1)*sizeof(DataType));
    _finish--;
  }
  size_t Vector::Find(DataType x)
  {
    DataType *tmp = _first;
    while(tmp != _finish)
    {
      if(*tmp == x)
        return tmp-_first;
      else
        tmp++;
    }
    return -1;
  }
  //截取n個(gè)字符
  void Vector::Reserve(size_t n)
  {
    //如果n<capacity,則什么都不做,將其容量降為size與n之間的最大值
    //會(huì)改變capacity,不會(huì)改變size,若n>capacity擴(kuò)容,
    if(n<Capacity())
    {
      _endofstorage = _first + ( n > Size() ? n : Size());
      return;
    }
    else if(n>Capacity())
    {
      Expand(n);
      return;
    }
    else
      return;
  }   
  void Vector::Print()
  {
    DataType *tmp = _first;
    while (tmp != _finish)
    {
      printf("%d ", *tmp);
      tmp++;
    }
    printf("\n");
  }
int main()
{
  Vector v;
  Vector v1(v);
  v.PushBack(1);
  v.PushBack(2);
  v.PushBack(3);
  v.PushBack(4);
  v.PushBack(5);
  v.PushBack(6);
  v.Print();
  v1 = v;
  v1.Print();
  v1.Erase(2);
  v1.Print();
  size_t ret = v1.Find(3);
  printf("%lu\n",ret);
  ret = v1.Find(2);
  printf("%lu\n",ret);
  ret = v1.Find(5);
  printf("%lu\n",ret);
  v1.Reserve(3);
  v1.Print();
  return 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++通過循環(huán)實(shí)現(xiàn)猜數(shù)字小游戲

    C++通過循環(huán)實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C++通過循環(huán)實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討

    基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討

    本篇文章是對(duì)在c中使用ftruncate()前需要fflush(),使用后需要rewind()進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • [c++]變量聲明與定義的規(guī)則詳解

    [c++]變量聲明與定義的規(guī)則詳解

    這篇文章主要介紹了[c++]變量聲明與定義的規(guī)則詳解,對(duì)于學(xué)習(xí)c++的朋友來(lái)說這是一個(gè)很細(xì)膩的文章,代碼完整,需要的朋友可以參考下
    2021-04-04
  • C語(yǔ)言實(shí)現(xiàn)JSON解析器的方法步驟

    C語(yǔ)言實(shí)現(xiàn)JSON解析器的方法步驟

    JSON是一種非常流行的數(shù)據(jù)格式,本文主要介紹了C語(yǔ)言實(shí)現(xiàn)JSON解析器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語(yǔ)言?指針數(shù)組進(jìn)階詳解

    C語(yǔ)言?指針數(shù)組進(jìn)階詳解

    在C語(yǔ)言和C++等語(yǔ)言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來(lái)指向若干個(gè)字符串,使字符串處理更加方便、靈活
    2022-02-02
  • c語(yǔ)言實(shí)現(xiàn)二叉查找樹實(shí)例方法

    c語(yǔ)言實(shí)現(xiàn)二叉查找樹實(shí)例方法

    這篇文章主要介紹了一個(gè)c語(yǔ)言版的二叉查找樹實(shí)現(xiàn),二叉查找樹,支持的操作包括:SERACH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR、INSERT、DELETE,大家參考使用吧
    2013-11-11
  • C/C++語(yǔ)言八大排序算法之桶排序全過程示例詳解

    C/C++語(yǔ)言八大排序算法之桶排序全過程示例詳解

    這篇文章主要為大家介紹了C/C++語(yǔ)言八大排序算法之桶排序算法過程的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • C++?ASIO實(shí)現(xiàn)異步套接字管理詳解

    C++?ASIO實(shí)現(xiàn)異步套接字管理詳解

    Boost?ASIO(Asynchronous?I/O)是一個(gè)用于異步I/O操作的C++庫(kù),該框架提供了一種方便的方式來(lái)處理網(wǎng)絡(luò)通信、多線程編程和異步操作,本文介紹了如何通過ASIO框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的異步網(wǎng)絡(luò)套接字應(yīng)用程序,需要的可以參考下
    2023-08-08
  • c語(yǔ)言中return與exit的區(qū)別淺析

    c語(yǔ)言中return與exit的區(qū)別淺析

    c語(yǔ)言中return與exit的區(qū)別淺析,需要的朋友可以參考一下
    2013-03-03

最新評(píng)論

临汾市| 邵阳县| 娱乐| 封开县| 丰顺县| 泾阳县| 衡东县| 江陵县| 扶绥县| 呼伦贝尔市| 黄大仙区| 平南县| 平顺县| 渭源县| 随州市| 怀远县| 文水县| 全南县| 大城县| 商南县| 东阿县| 墨脱县| 南溪县| 安多县| 新营市| 肃南| 衡阳市| 云霄县| 商都县| 赤水市| 黄大仙区| 蒙山县| 华阴市| 孟州市| 屯门区| 双峰县| 阜新市| 稻城县| 金溪县| 米林县| 巴东县|