c++模板编程-异质链表
2014-09-24 21:52
399 查看
概念:
像一个普通的链表结点中,其中成员next通常是指向同类型结点的指针.这就约束了链表中结点必须是同一类型,从而整个链表都只能保存同一类型的数据。而异质链表则是让next指向任何一种类型,也包括存有其他类型值得结点。这里就采用模板的方式.
数据结构:
假设我们现在要一个数据结构保存三个数据分别为int,char及std::string类型,则用hetero_node类模板可以构造出一个拥有三个结点分别保存三个数据的异质链表.具体代码:
像一个普通的链表结点中,其中成员next通常是指向同类型结点的指针.这就约束了链表中结点必须是同一类型,从而整个链表都只能保存同一类型的数据。而异质链表则是让next指向任何一种类型,也包括存有其他类型值得结点。这里就采用模板的方式.
数据结构:
template<typename T,typename N> struct hetero_node{ T value; N* next; hetero_node(T const& v,N* n):value(v),next(n){} }; //hetero_node有两个模板参数,T定义结点所保存的数据类型,而N则定义链表中下一个结点的类型.
假设我们现在要一个数据结构保存三个数据分别为int,char及std::string类型,则用hetero_node类模板可以构造出一个拥有三个结点分别保存三个数据的异质链表.具体代码:
typedef hetero_node<char,void> node_0; node_0 *p0; typedef hetero_node<int,node_0> node_1; node_1 *p1; typedef hetero_node<std::string,node_1> node_2; node_2 *p2; p1->next=p0; p2->next=p1;
相关文章推荐
- 用C++模板技术写的单链表
- C++ 学习练手 - 双向链表的模板实现
- 堆排序,C++模板编程
- C++ 模板和 C# 泛型之间的区别(C# 编程指南)
- 分享:篮子、水果和鸡蛋——关于C++的模板偏特化和萃取编程技法
- 异质链表(C++)
- 数据结构之单循环链表C++(模板)
- 强大的C++模板编程,任意类型间轻松转换
- C++模板与范型编程
- [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
- C++中的模板实例:链表模板
- C++模板编程:如何在编译器确定斐波那契数列?
- C++模板编程中的Traits技术
- c/c++:一个带迭代器的链表模板 iterator
- 【东南大学】【仪器科学与工程学院】C++下第四次上机作业 单链表类模板 非书上版本 本人自创版本 部分参考书上 包含编程时一些该注意的事项
- C++模板编程及函数对象
- C++模板-双向链表
- 数据结构C++模板实现之----------------单向链表
- C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构
- 堆排序,C++模板编程