5.15作业vector

template <typename T>

class Myvector

{

private:

        T * first;

        T * last;

        T * end;

};

要实现的函数: 构造函数 析构函数 拷贝构造 拷贝赋值

at()

empty()

full()

front()

back()

size()

clear()

expand()

 push_back()

pop_back()

#include <iostream>
#include <vector>

using namespace std;

template <typename T>
class Myvector
{

    private:
        T * first;
        T * last;
        T * end;
        
        void expand()
           {
               size_t capacity = end - first;
               size_t size = last - first;
       
               T *newFirst = new T[capacity * 2]();
               for (size_t i = 0; i < size; ++i)
               {
                   newFirst[i] = first[i];
               }
       
               delete []first;
               first = newFirst;
               last = first + size;
               end = first + capacity * 2;
           }
        
    public:
         Myvector()     //无参构造
         {
             first = nullptr;
             last = nullptr;
             end = nullptr; 
         }
         
         Myvector(int n)       //有参构造
         {
             first = new T[n];
             last = first + n;
             end = last;
         }
         
         //拷贝构造
         Myvector(const Myvector &other)
         {
              size_t length=other.size;
              first = new T[length];
              last = first + length;
              end = last;
              
              for(size_t i = 0;i<length;i++)
              {
                  first[i] = other.first[i];
              }
         }
         
         //拷贝赋值
         Myvector & operator=(const Myvector &other)
         {
              size_t length=other.size;
              if(this != &other)
              {
                  delete[] first;
                  
                  first = new T[length];
                  last = first + length;
                  end = last;
                  
                  for(size_t i = 0;i<length;i++)
                  {
                      first[i] = other.first[i];
                  }
             }
              return  *this;
         }
         
         //析构函数
         ~Myvector ()
         {
             delete[] first;
                     
         }
         char &at(int pos);
         T & at (size_t pos)
         {
             if(pos >= size())
             {
                
             }
              return first[pos];
         }
         
         bool empty() const { return first == last; }
         
         bool full() const { return last == end; }
         T & front() { return *first; }
         T & back()  { return *(last - 1); }
        
         size_t size() const { return last - first; }
         
         void clear() { last = first; }
        
         void push_back(const T &val)
            {
                if (full())
                {
                    expand();
                }
                *last++ = val;
            }
         
         void pop_back()
            {
                if(empty())
                {
                    throw out_of_range("pop_back on an empty vector.");
                }
                --last;
            }
         
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值