C++复习之String和队列代码的实现

本文主要复习了C++中的String类型及其使用,同时详细介绍了如何实现循环队列的数据结构,包括其核心概念和代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String类型

#include <iostream>
using namespace std;

class String
{
public:            
    String(const char *str = nullptr)//普通构造函数
    {
        if (str != nullptr)
        {
            m_data = new char[strlen(str) + 1];
            strcpy(m_data, str);
        }
        else
            m_data = new char[1];
            *m_data = '\0';
    }
    String(const String &other)//拷贝构造函数
    {
        m_data = new char[strlen(other.m_data)+1];
        strcpy(m_data, other.m_data);
    }
    ~String(void)//构造函数
    {
        delete[]m_data;
        m_data = nullptr;
    }
    //string&是为了支持连续的operator=赋值操作
    String& operator=(const String &other)//赋值函数
    {
        if (this == &other)
        {
            return *this;  
        }
        delete[]other.m_data;
        m_data = new char[strlen(other.m_data) + 1];
        strcpy(m_data, other.m_data);
        return *this; 
    }
private:
    char *m_data;//用于保存字符串
};

int main()
{
    //调用const char*参数的构造函数
    String str1;
    String str2("hello");
    String str3 = "world";
    //调用拷贝构造函数
    String str4 = str3;
    String str5(str3);
    //调用赋值重载函数
    str1 = str2;
    return 0;
}

循环队列

#include <iostream>
using namespace std;

class Queue
{
public:
  Queue(int size = 10)
  {
      _pQue = new int[size];
      _front = _rear = 0;
      _size = size;
  }
  ~Queue()
  {
      delete[]_pQue;
      _pQue = nullptr;
  }
  Queue(const Queue &src)
  {
      _front = src._front;
      _rear = src._rear;
      _size = src._size;
      _pQue = new int[_size];
      int index = 0;
      for (int i = _front; i != _rear; i = (i + 1) % _size)
      {
          _pQue[index++] = src._pQue[i];
      }
      
  }
  Queue& operator=(const Queue &src)
  {
      if (this == &src)
      {
          return *this;
      }
      delete[]_pQue;
      _front = src._front;
      _rear = src._rear;
      _size = src._size;
      _pQue = new int[_size];
      int index = 0;
      for (int i = _front; i != _rear; i = (i + 1) % _size)
      {
          _pQue[index++] = src._pQue[i];
      }
      return *this;
  }
  void push(int val)
  {
      if (full())
      {
          resize();
      }
      _pQue[_rear] = val;
      _rear = (_rear+1)%_size; 
  }
  void pop()
  {
      if (empty())
      {
          return;
      }
      _front = (_front + 1) % _size;
  }
  int front()
  {
      return _pQue[_front];
  }
  bool full()
  {
      return (_rear + 1) % _size == _front;
  }
  bool empty()
  {
      return _rear == _front;
  }
private:
  int *_pQue;//申请队列的数组空间
  int _front;//队头
  int _rear;//队尾
  int _size;//队列大小
  void resize()
  {
      int *_ptm = new int[2 * _size];
      int index = 0;
      for (int i = _front; i != _rear; i = (i+1)%_size)
      {
          _ptm[index++] = _pQue[i];
      }
      delete[]_pQue;
      _pQue = _ptm;
      _size *= 2;
      _front = 0;
      _rear = index;
  }
};
int main()
{
  Queue s1;
  Queue s2 = s1;
  for (int i = 0; i < 20; ++i)
  {
      s2.push(rand() % 100);
  }
  while (!s2.empty())
  {
      cout << s2.front() << " ";
      s2.pop();
  }
  cout << endl;
  s2 = s1;
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值