探讨c++标准模板库中的List

原创 2004年10月22日 08:59:00


//DynaList.h
#ifndef DYNALIST_H
#define DYNALIST_H


template<class T>
class DynaList
{
public:
 DynaList();
 ~DynaList();
public:
 //增加一个节点
 int Add(T objSrc);
 T& operator[](int nIndex);
 int Size();
private:
 struct tagNode
 {
  //加入链表的对象
  T t;
  //是否第一次被初始化
  bool bFirst;
  //节点索引值
  int nIndex;
  //下一个节点指针
  tagNode* pNext;
  //前一格节点指针
  tagNode* pBefore;
 };
 
private:
 //节点临时指针
 tagNode* m_pTem;
 //链表的头指针
 tagNode* m_pHead;
 //新节点指针
 tagNode* m_pNew;
 int m_nSize;
};
#endif
//DynaList.cpp
#include "DynaList.h"

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

using namespace std;

template<class T>
DynaList<T>::DynaList()
{
 //初始化数据
 m_pHead = NULL;
 m_pNew = NULL;
 m_pHead = new tagNode;
 m_pHead->nIndex = -1;
 m_pHead->bFirst = true;
 m_pHead->pBefore = NULL;
 m_pHead->pNext = NULL;
 m_nSize = 0;
}

//增加节点
template<class T>
int DynaList<T>::Add(T objSrc)
{
 //设置一个遍历的指针
 m_pTem = m_pHead;
 //将遍历指针移到最后一个节点
 while(m_pTem->pNext != NULL)
 {
  m_pTem = m_pTem->pNext;
 }
 
 //新节点的处理
 m_pNew = new tagNode;
 m_pNew->pBefore = m_pTem;
 m_pNew->pNext = NULL;
 m_pNew->bFirst = true;
 m_pNew->nIndex = m_pTem->nIndex + 1;
 //内容复制
 memcpy(&m_pNew->t,&objSrc,sizeof(objSrc));
 m_pTem->pNext = m_pNew;
 //得到首节点
 m_pHead = m_pTem;
 ++m_nSize;
 return m_pNew->nIndex;
}

template<class T>
int DynaList<T>::Size()
{
 return m_nSize;
}

template<class T>
T& DynaList<T>::operator[](int nIndex)
{
 if (nIndex < 0)
 {
  throw exception("It is not index!");
 }

 if (nIndex > m_nSize - 1)
 {
  throw exception("It is out of the range!");
 }

 while(m_pHead->pNext != NULL)
 {
  if (m_pHead->nIndex == nIndex)
  {
   return m_pHead->t;
  }

  m_pHead = m_pHead->pNext;
 }

 return m_pHead->t;
}

template<class T>
DynaList<T>::~DynaList()
{
 
 while(m_pHead->pNext != NULL)
 {
  m_pHead = m_pHead->pNext;
 }
 //将节点一个一个释放掉
 while(m_pHead->pBefore != NULL)
 {
  tagNode* pTem = m_pHead;
  m_pHead = m_pHead->pBefore;
  delete pTem;
 }
}

C++标准模板库STL算法与自适应容器(栈和队列)

参考《21天学通C++》第23与第24章节,对STL算法与自适应容器进行介绍。 实际上在前面的STL顺序容器、关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数。而自适应容器是在顺序容器的基...
  • LG1259156776
  • LG1259156776
  • 2015年08月06日 13:22
  • 1820

C++ STL标准模板库

标准模板库 STL(StandardTemplate Library),即标准模板库,是一个具有工业强度的、高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Librar...
  • qq563129582
  • qq563129582
  • 2015年02月27日 16:32
  • 1245

c++标准模板库简介

STL组件(1)容器: 用来管理某类对象的集合。每类对象都有其优缺点。 (2)迭代器: 用来在一个对象集合中遍历元素。这个对象或许是个容器集合,或许是个集合,或者是容器的一部分。 (3)算法:...
  • u010956473
  • u010956473
  • 2017年05月23日 00:23
  • 221

C++标准库和C++标准模版库

     C++标准库很大,在现在的情况下,C++标准库确实越来越好,因为大的库会包含大量的功能.标准库中的功能越多,开发自己的应用程序时能借助的功能就越多,C++库并非提供一切(很明显的是没有提供开...
  • Molany
  • Molany
  • 2008年11月25日 16:55
  • 4499

标准模板库(list)

对list的理解: 1.list不支持随机访问,只支持顺序访问。 2.size用于获得list的节点个数,clear用于清空list。 3.front和back分别得到首部元素和尾部元素。 #...
  • fu_yunjian
  • fu_yunjian
  • 2016年09月30日 16:35
  • 219

Unix/Linux C++应用开发-C++标准模板库

作为C++标准库相当重要的一部分,STL库提供一系列组件操作。它主要可以分为容器、迭代器、基本算法、函数对象以及内存分配器和配接器六个部分。整个STL库的代码都采用模板函数以及模板类的方式实现,具有高...
  • wangfengwf
  • wangfengwf
  • 2013年09月11日 21:21
  • 8787

C++入门-STL (Standard Template Library) 标准模板库

STL包含容器类(Container)、迭代子(Iterator)和算法(Algorithm)三个部分。 (1)、容器 (2)、算法 在模板中算法不依赖于具体的数据类型,而泛型算法更...
  • cdl2008sky
  • cdl2008sky
  • 2014年04月18日 15:17
  • 5692

STL标准模板库 list的使用

ZZ 李木空间 www.limou.net list的使用 在使用list必须包括头文件#include 如何定义一个list对象 #include int main (void) {...
  • fisher_jiang
  • fisher_jiang
  • 2011年10月05日 21:27
  • 2852

C++标准库,标准程序库,标准模板库之间是什么关系(重要!!!)

C++强大的功能来源于其丰富的类库及库函数资源。C++标准库的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利用标准库完成。这样做的直接好处有:           (1)成本:已经作为...
  • Lina_ACM
  • Lina_ACM
  • 2016年06月06日 20:44
  • 789

C++ 标准模板库(STL)汇总

C++ 标准模板库(STL)汇总
  • DaveBobo
  • DaveBobo
  • 2017年02月22日 21:08
  • 771
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:探讨c++标准模板库中的List
举报原因:
原因补充:

(最多只允许输入30个字)