21xrx.com
2024-09-17 04:23:54 Tuesday
登录
文章检索 我的文章 写文章
C++顺序表类模板的定义和打印方法
2023-07-05 07:33:44 深夜i     --     --
C++ 顺序表 类模板 定义 打印方法

顺序表是一种线性表,它的每个元素都存储在一段连续的存储空间中,顺序表的访问方式是通过下标实现的。在C++中,使用类模板可以定义顺序表类,使其具有通用性和可复用性。下面将介绍C++顺序表类模板的定义和打印方法。

1. 定义顺序表类模板

C++顺序表类模板的定义包括两个部分:类模板声明和类模板定义。类模板声明定义了模板的参数和类的名称,类模板定义包括类中的成员函数和具体实现。

下面是一个简单的顺序表类模板的声明:

template

class SeqList {

public:

  SeqList(int size); // 构造函数

  ~SeqList(); // 析构函数

  bool isEmpty(); // 判断顺序表是否为空

  bool isFull(); // 判断顺序表是否已满

  void clear(); // 清空顺序表

  int length(); // 获取顺序表的长度

  bool append(T element); // 在顺序表末尾添加元素

  bool insert(int index, T element); // 在指定位置插入元素

  bool remove(int index); // 删除指定位置的元素

  T get(int index); // 获取指定位置的元素

private:

  T* data; // 存储数据的数组

  int maxSize; // 最大长度

  int length_; // 当前长度

};

在上面的声明中,SeqList 是一个类模板,其中T是模板的参数。类中定义了顺序表的操作函数和变量。其中data成员是一个指向存储数据的数组,maxSize成员是数组的最大长度,length_成员是当前顺序表的长度。

顺序表类的具体实现包括头文件和源文件两部分,下面给出头文件的实现:

template

SeqList ::SeqList(int size) {

  data = new T[size];

  maxSize = size;

  length_ = 0;

}

template

SeqList ::~SeqList() {

  if (data) {

    delete[] data;

    data = nullptr;

  }

}

template

bool SeqList ::isEmpty() {

  return length_ == 0;

}

template

bool SeqList ::isFull() {

  return length_ == maxSize;

}

template

void SeqList ::clear() {

  length_ = 0;

}

template

int SeqList ::length() {

  return length_;

}

template

bool SeqList ::append(T element) {

  if (isFull()) {

    return false;

  }

  data[length_] = element;

  length_++;

  return true;

}

template

bool SeqList ::insert(int index, T element) {

  if (isFull() || index < 0 || index > length_) {

    return false;

  }

  for (int i = length_; i > index; i--) {

    data[i] = data[i-1];

  }

  data[index] = element;

  length_++;

  return true;

}

template

bool SeqList ::remove(int index) {

  if (isEmpty() || index < 0 || index >= length_) {

    return false;

  }

  for (int i = index; i < length_ - 1; i++) {

    data[i] = data[i+1];

  }

  length_--;

  return true;

}

template

T SeqList ::get(int index) {

  if (index < 0 || index >= length_) {

    return T();

  }

  return data[index];

}

在上面的实现中,头文件中定义了类模板的所有成员函数。其中,构造函数和析构函数分别用于初始化和销毁顺序表类的对象。isEmpty和isFull用于判断顺序表是否为空或已满,clear用于清空顺序表,length用于获取顺序表的长度。append用于在顺序表的尾部添加元素,insert用于在指定位置插入元素,remove用于删除指定位置的元素,get用于获取指定位置的元素。

2. 打印顺序表

在使用顺序表时,我们通常需要输出顺序表中的所有元素。为了方便起见,我们可以在顺序表类中定义一个打印函数,用于输出顺序表中的所有元素。下面是一个简单的打印函数实现:

template

void SeqList ::print() {

  cout << "[";

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

    if (i > 0) {

      cout << ", ";

    }

    cout << data[i];

  }

  cout << "]" << endl;

}

在上面的代码中,print函数用于打印顺序表中的所有元素。我们可以使用一个循环遍历顺序表中的所有元素,并输出到控制台。对于每个元素,我们在前面加上一个逗号,以便区分不同的元素。最后,我们在顺序表前后加上方括号,以便显示顺序表的范围。

综上所述,C++顺序表类模板的定义和打印方法可以方便地实现对顺序表的操作和输出。在实际应用中,我们可以根据具体需要,对顺序表进行扩展和优化,以满足不同的业务需求。

  
  

评论区

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