c++動的順序テーブルの実装(コピー構造付与演算子の再ロードなどの操作)

1462 ワード

#pragma once
#include<iostream>
#include<malloc.h>
using namespace std;
typedef int DataType;
class SList
{
public:
 SList() :_p(NULL), _size(0), _capcity(0)
 {
 };
 SList(SList & s) 
 {
  if (s._p == NULL)
   return;
  DataType *tmp = new DataType[s._size];
  _p = tmp;
  memcpy(_p, s._p, s._size*sizeof(DataType));
  _size = s._size;
  _capcity = _size;
  
  

 }
 SList& operator=(const SList &s)
 {
  if (&s != this)
  {
   DataType *tmp = new DataType[s._size];
   memcpy(tmp, s._p,s._size);
   delete[]_p;
   _p = tmp;
   _size = s._size;
   _capcity = s._capcity;
  }
  return *this;
 }
 
 ~SList()
 {
  if (_p)
  {
   delete[]_p;
  }
 }
 void UpdateCup()
 {

  _capcity = 2 * _capcity + 3;
  _p = (DataType *)realloc(_p, (sizeof(DataType)*_capcity));
 }
 void PushBack(DataType x)
 {
  if (_size >= _capcity)
  {
   UpdateCup();
  }
  _p[_size] = x;
  ++_size;
 }
 void PopBack()
 {
  if (_size <= 0)
   return;
  --_size;

 }
 
 void PrintSlist()
 {
  for (int i = 0; i < _size; ++i)
  {
   cout << _p[i] << "->";
  }
  cout << "NULL"<<endl;
 }
 void Insert(size_t pos,DataType x)
 {
  if (pos<0 && pos>_size)
   return;
  if (_size >= _capcity)
  {
   UpdateCup();

  }
  ++_size;

  for (int i = _size; i > pos; i--)
  {
   _p[i] = _p[i - 1];
  }
  _p[pos] = x;

 }

private:
 DataType *_p;
 size_t _size;
 size_t _capcity;

};