C++中的链表节点用模板类和用普通类来实现的区别
C++中的链表节点通常情况下类型都是一致的.因此我们可以用模板来实现.
#include <iostream>
using namespace std; template<typename Type>//定义一个模板类必须有的声明
class LinkNode //表示链表节点的类
{
public:
LinkNode() :m_pnext(nullptr){}//构造函数,在函数体内实现的相当于默认在前面加了inline关键字修饰
LinkNode(Type item, LinkNode* next=nullptr) :m_data(item), m_pnext(next){}//带默认参数的构造函数
~LinkNode(){ m_pnext = nullptr;} Type getData(){ return m_data; }//注意返回值类型,必须写上Type,要明确 friend ostream& operator<<(ostream& out, LinkNode& node)//友元函数重载操作符,可以在类里面实现,也可以在类外面实现,
{
out << node.m_data;
return out;
} //friend ostream& operator<< <Type>(ostream& out, LinkNode& node)//在类外面实现友元函数,用于操作符重载时,必须明确类型,即<Type>不能少,否则报错 private:
Type m_data;
LinkNode* m_pnext;//所有的LinkeNode后面都可以省略<Type>,因为这在一开始的类前面就定义了LinkeNode为模板类,默认就是和上面的类型一致
}; //template<typename Type>
//ostream& operator<<(ostream& out, LinkNode<Type>& node)//在类的外边实现友元函数,注意在类里面声明时,需要明确类型operator<< <Type>(),否则报错
//{
// out << node.m_data;
// return out;
//} int main()
{
LinkNode<int> c;
LinkNode<int> a(,&c);
cout << "a.m_data= "<<a << endl; system("pause");
return ;
}
2.如果不用类模板,就可以很简单了,比如我们用int类型:
#include <iostream>
using namespace std; struct LinkNode{
public:
LinkNode() :m_pnext(nullptr), m_data(){}//用成员列表的方式来初始化构造函数,效率比在构造函数里面初始化高,m_data可以不用初始化,系统默认为0,但为了保险可以显示的初始化为0
LinkNode(int num, LinkNode* next = nullptr) :m_data(num), m_pnext(next){}//带默认参数的构造函数
~LinkNode(){ m_pnext = nullptr; } int getData(){ return m_data; } friend ostream& operator<<(ostream& out, LinkNode& node);//友元函数,重载操作符,写在类里面和类外面都没有区别,没有模板那么麻烦,也不需要明确类型
/*friend ostream& operator<<(ostream& out, LinkNode& node)
{
return out << node.m_data;
}*/ private:
int m_data;//数据域,明确为int
LinkNode* m_pnext;//指针域 }; ostream& operator<<(ostream& out, LinkNode& node)
{
return out << node.m_data;
} int main()
{
LinkNode c;
//LinkNode b();//报错,没有与之对应的构造函数,要么写b(3),或者b(3,&c),要么省略()
LinkNode a(,&c);
cout <<"a.m_data= " << a << endl; system("pause");
return ;
}
C++中的链表节点用模板类和用普通类来实现的区别的更多相关文章
- Android代码优化----Application节点的模板写法及UI工具类
一. MyApplication类的编写: 新建一个类MyApplication,继承自Application.代码如下: MyApplication.java: package com.smyhva ...
- linux内核中的链表
1.内核中的链表 linux内核链表与众不同,他不是把将数据结构塞入链表,而是将链表节点塞入数据,在2.1内核中引入了官方链表,从此内核中所有的链表使用都采用此链表,千万不要在重复造车轮子了!链表实现 ...
- javascript中在链表中向前(向后)移动n个节点
1.概念 在链表上移动n个节点,我第一眼看到这个需求的时候首先想到的是当前节点.使用这个当前节点作为参考来移动,没有这个当前节点的话是没有办法在链表上前进和后退的.初始化定义链表的时候定义一个当前节 ...
- 【IT笔试面试题整理】删除无序链表中重复的节点
[试题描述]定义一个函数,输入一个链表,删除无序链表中重复的节点 [参考代码] 方法一: Without a buffer, we can iterate with two pointers: &qu ...
- 【剑指offer】删除链表中重复的节点,C++实现(链表)
0.简介 本文是牛客网<剑指offer>笔记. 1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1-> ...
- php实现删除链表中重复的节点
php实现删除链表中重复的节点 一.总结 二.php实现删除链表中重复的节点 题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1 ...
- 剑指offer-面试题18-删除链表中重复的节点-链表
/* 题目: 删除链表中重复的节点 */ /* 思路: 1.声明一个头节点head,即使首元节点被删除,也可返回head->next 2.声明两个指针, 一个指针qNode指向确定不会删除的链表 ...
- LeetCode 83. Remove Duplicates from Sorted List(从有序链表中删除重复节点)
题意:从有序链表中删除重复节点. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode ...
- 标准模板库中的链表(list)
//C++数据结构与算法(第4版) Adam Drozdek 著 徐丹 吴伟敏<<清华大学出版社>> 头文件:include<list> list() 创建一个 ...
随机推荐
- _config.json
{ "AUTH": "66D86F40DF42A6103C2B0C2F16E41472DABF0594C79859E5EF51E06B377215F3B464E3F0F3 ...
- .net分页控件webdiyer:AspNetPager
首先下载:AspNetPager.dll AspNetPager.xml 放到bin目录下 页面添加<%@ Register Assembly="AspNetPager" ...
- javaSE第十三天
第十三天 76 1. StringBuffer(掌握) 76 (1)说明: 77 (2)StringBuffer的构造方法 77 (3)StringBuffer的常见功能 ...
- jQuery中$.ajax()和$.getJson()同步处理详解
一.前言 为什么需要用到同步,因为有时候我们给一个提交按钮注册提交表单数据的时候,在提交动作之前会进行一系列的异步ajax请求操作,但是页面js代码会按顺序从上往下面执行,如果你在这过程中进行了异步操 ...
- Vue.js学习 Item1 --快速入门
我们以 Vue 数据绑定的快速导览开始.如果你对高级概述更感兴趣,可查看这篇博文. 尝试 Vue.js 最简单的方法是使用 JSFiddle Hello World 例子.在浏览器新标签页中打开它,跟 ...
- luigi学习9--执行模型
luigi的执行和触发模型非常简单. 一.luigi的执行模型 当你执行一个luigi的工作流的时候,worker调度所有的task,并且执行task在一个单独的进程中. 这种scheme最大的好处是 ...
- 关于MongoDb Replica Set的故障转移集群——实战篇
如果你还不了解Replica Set的相关理论,请猛戳传送门阅读笔者的上一篇博文. 因为Replica Set已经属于MongoDb的进阶应用,下文中关于MongoDb的基础知识笔者就不再赘述了,请参 ...
- 怎样用foreach去修改数组之中的数据
$table_exchange=array(1,2,3,4,5,6,7,8); foreach ($table_exchange as $b=>$c){ $table_exchange[$b]= ...
- php验证是否是md5编码的代码
php验证是否是md5编码的示例. 代码很简单,使用了正则表达式. function is_md5($password) { return preg_match("/^[a-z0-9 ...
- apache日志文件详解和实用分析命令
apache日志文件每条数据的请意义,以及一些实用日志分析命令. 一.日志分析 如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error ...