#include <iostream>
#include <string>
using namespace std;
template<class T> class Node//创建一个类模板,一个可以放入任何类型节点的链表
{
public:
Node(T val, Node* next):val(val),next(next){}
static void showAll();//打印全部节点的值
static void insertHead(T);//头插
static void insertTail(T);//尾插
static void delHead();//删头
static void delTail();//删尾
static void clear();//清空
protected:
T val;
Node *next;
static Node *head;
private:
};
template<class T> Node<T>* Node<T>::head = 0;
template<class T> void Node<T>::showAll(){//打印全部节点的值
Node *p = head;
while (p)
{
cout<<p->val<<" ";
p = p->next;
}
cout<<endl;
}
template<class T> void Node<T>::insertHead(T val){//头插
Node *p = new Node(val, head);
head = p;
}
template<class T> void Node<T>::insertTail(T val){//尾插
Node *p = new Node(val, 0);
if (!head)
{
head = p;
return;
}
Node *q = head;
while (q->next)
{
q = q->next;
}
q->next = p;
}
template<class T> void Node<T>::delHead(){//删头
Node *p = head;
if (head)
{
head = head->next;
delete p;
}
}
template<class T> void Node<T>::delTail(){//删尾
if (!head)
{
return;
}
if (!(head->next))
{
delete(head);
head = NULL;
return;
}
Node *p = head;
while (p->next->next)
{
p = p->next;
}
delete(p->next);
p->next = NULL;
}
template<class T> void Node<T>::clear(){//清空
Node *p = head;
Node *q = 0;
head = 0;
while (p)
{
q = p;
p = p->next;
delete q;
}
}
class Student//创建一个自定义的学生类
{
public:
Student(string name, int age,char sex):name(name), age(age), sex(sex){}
void showInfo(){
cout<<"姓名:"<<name<<" 年龄:"<<age<<" 性别:"<<sex<<endl;
}
protected:
string name;
int age;
char sex;
private:
};
void Node<Student>::showAll(){//学生类节点和其他基本数据类型不同,不能直接用<<输出,所以重载showAll()
Node *p = head;
while (p)
{
p->val.showInfo();
p = p->next;
}
}
void main(){
for (int i = 1; i < 10; i++)
{
Node<int>::insertTail(i);//这时Node<int>称为一个用类模板生成的模板类
Node<float>::insertTail(i / 10.0f);
Node<double>::insertTail(i / 10.00);
Node<Student>::insertTail(Student("stu", i, 'F'));
}
Node<int>::showAll();
Node<float>::showAll();
Node<double>::showAll();
Node<Student>::showAll();
}
- 大小: 35.4 KB
分享到:
相关推荐
- 类似于`<stdlib.h>`,提供了通用的实用工具函数。 10. **`<cstring>`**: - 类似于`<string.h>`,提供了字符串操作函数。 11. **`<ctime>`**: - 类似于`<time.h>`,提供了时间日期处理函数。 12. **`<deque...
例如,一个插入排序函数模板可能这样定义:`template<class Sortable>` `void insertionSort(Sortable a[], int n);` 这里`Sortable`就是一个概念,它指代了一组满足特定条件的数据类型。 #### C++标准模板库(STL) ...
STL的13个主要头文件包括:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>,这些文件包含了STL的所有核心组件。例如,`std::...
### 数据结构各种算法实现(C++模板) 数据结构经典实例 #### 1、顺序表 **顺序表**是一种基本的数据结构,通常使用数组实现。在C++中,可以通过模板类来实现一个通用的顺序表。 ##### Seqlist.h ```cpp const int...
STL广泛使用了模板,如`vector<T>`、`map<Key, T>`等。模板类和函数使得STL可以处理多种数据类型,增强了代码的复用性。 8. 栈和队列: `stack`和`queue`容器适配器提供了后进先出(LIFO)和先进先出(FIFO)的...
总之,《Visual C++ 6.0 模板库参考手册》是学习和掌握C++模板编程的宝贵资源,它涵盖了从基础到高级的主题,包括模板的使用、STL的应用以及与异常处理和性能优化相关的实践。通过深入研究这本手册,开发者能够更好...
- 循环链表的操作类似于单链表,但有特定的循环边界条件。 3. **栈(Stack)** - **顺序栈(SeqStack.h)** - 顺序栈使用顺序表来实现栈的操作,如后进先出(LIFO)。 - 主要操作包括压栈(push)和出栈(pop)...
- **迭代器**:迭代器是访问容器中元素的接口,类似于指针,但提供了更多的操作,如前向、后向、双向和随机访问迭代器。 - **算法**:STL提供了一组强大的算法,如`sort`用于排序,`find`用于查找,`copy`用于复制...
在吕鑫老师的C++第十课中,我们探讨的是如何构建一个学生系统,这个系统的核心是通过自定义的仿STL的list类以及采用表外排序技术来实现的。STL,即Standard Template Library,是C++标准库的一部分,提供了一系列...
它的元素是连续存储的,因此可以通过下标访问元素,类似于C语言的数组。 - `push_back()`和`pop_back()`用于在末尾添加或移除元素。 - `insert()`和`erase()`函数可以插入或删除元素在指定位置。 - `reserve()`...
C++ API标准库是C++编程中不可或缺的一部分,它提供了丰富的功能,使开发者能够构建高效、可靠的软件系统。这些库包括了输入/输出操作、容器、算法、字符串处理、异常处理等多个方面,覆盖了从基本数据类型到复杂...
STL,全称为Standard Template Library,是C++编程语言中的一种重要库,它提供了一系列高效且灵活的容器、算法和迭代器,旨在帮助开发者构建更高效、可维护的代码。STL的核心理念是通过模板机制实现泛型编程,使得...
`vector`类似于动态数组,支持快速随机访问,但插入和删除操作在非尾部进行时效率较低;`list`则是一个双向链表实现,适用于频繁插入和删除的情况;`deque`(双端队列)结合了数组和链表的优点,支持两端的快速插入...
迭代器提供一种访问容器中元素的方式,类似于指针,但更安全和通用。算法是一组用于操作容器内元素的函数,如sort(排序)、find(查找)和copy(复制)。函数对象(或称为仿函数)是具有函数调用操作的类,它们可以...
函数对象,也称为仿函数(functors),是STL中的一类特殊对象,它们的行为类似于函数,但可以拥有状态并支持运算符重载。例如,std::less和std::greater可以作为比较函数对象,用于定义排序顺序。 在《数据结构C++...
容器是用来存储元素的类模板,如vector是一种动态数组,list则是一种双向链表。迭代器是访问容器内元素的一种方式,类似于指针,但更安全、功能更强大。算法是处理容器中元素的一系列函数模板,例如排序、查找、复制...
- 迭代器:作为访问容器内元素的接口,类似于指针,但更加灵活且安全。 - 算法:如排序(sort)、查找(find)、遍历(for_each)等,可以极大地提高代码的可读性和效率。 - 函数对象(Functors):实现了函数调用...