21xrx.com
2024-12-23 02:05:07 Monday
登录
文章检索 我的文章 写文章
C++队列类的多文件结构实现
2023-07-05 11:21:14 深夜i     --     --
C++ 队列类 多文件结构 实现

在C++中,队列是一种先进先出(FIFO)的数据结构。队列类可以用来执行许多不同的任务,例如在程序中存储信息以供稍后处理,或者在多线程应用程序中管理任务队列。在本文中,我们将学习如何创建一个C++队列类,并将其实现为多个文件。

1. 创建队列类头文件

队列类的头文件应包含类的声明和方法的原型。在本例中,我们将创建一个名为Queue的队列类。队列类的声明如下:

Queue.h


class Queue {

  private:

    int* m_data;

    int m_size;

    int m_front;

    int m_end;

  public:

    Queue(int size);

    ~Queue();

    Queue(const Queue& other);

    Queue& operator=(const Queue& other);

    void push(int value);

    void pop();

    int front();

    int size();

    bool empty();

};

2. 创建队列类的实现文件

队列类的实现文件应包含每个方法的定义。在本例中,我们将创建一个名为Queue.cpp的实现文件。实现文件的内容如下:

Queue.cpp


#include "Queue.h"

Queue::Queue(int size) :

  m_size(size),

  m_front(0),

  m_end(0)

{

  m_data = new int[m_size];

}

Queue::~Queue()

{

  delete[] m_data;

}

Queue::Queue(const Queue& other) :

  m_size(other.m_size),

  m_front(other.m_front),

  m_end(other.m_end)

{

  m_data = new int[m_size];

  

  for (int i = 0; i < m_size; i++) {

    m_data[i] = other.m_data[i];

  }

}

Queue& Queue::operator=(const Queue& other)

{

  if (this != &other) {

    delete[] m_data;

    

    m_size = other.m_size;

    m_front = other.m_front;

    m_end = other.m_end;

    

    m_data = new int[m_size];

    

    for (int i = 0; i < m_size; i++) {

      m_data[i] = other.m_data[i];

    }

  }

  

  return *this;

}

void Queue::push(int value)

{

  m_data[m_end] = value;

  m_end++;

  

  if (m_end == m_size) {

    m_end = 0;

  }

}

void Queue::pop()

{

  m_front++;

  

  if (m_front == m_size) {

    m_front = 0;

  }

}

int Queue::front()

{

  return m_data[m_front];

}

int Queue::size()

{

  if (m_end >= m_front) {

    return m_end - m_front;

  } else {

    return m_size - m_front + m_end;

  }

}

bool Queue::empty()

{

  return (m_front == m_end);

}

3. 创建使用队列类的文件

现在,我们已经有了一个完整的队列类的实现。接下来,我们将创建一个简单的程序来使用该类。在本例中,我们将创建一个名为main.cpp的文件,并在其中创建一个队列并添加一些元素。main.cpp的内容如下:

main.cpp


#include <iostream>

#include "Queue.h"

int main()

{

  Queue q(10);

  

  for (int i = 0; i < 5; i++) {

    q.push(i);

  }

  

  while (!q.empty()) {

    int value = q.front();

    std::cout << value << std::endl;

    q.pop();

  }

  

  return 0;

}

4. 编译文件

我们已经有了一个完整的队列类,并且已经创建了一个使用该类的简单程序。现在,我们需要编译这些文件以生成可执行文件。我们可以使用GCC编译器来编译这些文件。在Linux终端中,我们可以运行以下命令来编译这些文件:


g++ -c Queue.cpp main.cpp

g++ Queue.o main.o -o QueueApp

其中,第一条命令用于编译源文件,生成对象文件;第二条命令用于将对象文件链接在一起生成可执行文件。

5. 运行程序

现在我们已经有了一个名为QueueApp的可执行文件,我们可以在终端中运行它以执行程序。在Linux终端中,我们可以运行以下命令来运行程序:


./QueueApp

程序将运行并显示以下内容:


0

1

2

3

4

这些结果表明我们已经成功地创建了一个队列类,并将它实现为多个文件。该程序可以作为基础来创建更复杂的应用程序,并且可以通过添加新的方法和功能来扩展该类。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复