C++中CSimpleList的实现与测试实例_C 语言

本文实例讲述了C++简单列表类的实现方法。分享给大家供大家参考。具体方法如下:

_AFXTLS.CPP文件如下:

//#include "StdAfx.h
#include <stddef.h>
#include <stdio.h>
#include "_AFXTLS_.H" 

struct MyThreadData{
  MyThreadData* pNext;
  int nShortData;
}; 

void CSimpleList::AddHead(void *p)
{
  *GetNextPtr(p)=m_pHead;
  m_pHead = p;
} 

BOOL CSimpleList::Remove(void* p)
{
  BOOL bRet = FALSE;
  if (p == NULL)
  {
    bRet = FALSE;
  } 

  if (p == m_pHead)
  {
    m_pHead = GetNext(m_pHead);
    bRet = TRUE;
  }
  else
  {
    void*  pTest;
    pTest = m_pHead;
    while (pTest && (GetNext(pTest) != p))
    {
      pTest = GetNext(pTest);
    }
    if (pTest != NULL)
    {
      *GetNextPtr(pTest) = GetNext(p);
      bRet = TRUE;
    }
  }
  return bRet; 

} 

void main()
{
  MyThreadData* pData;
  CSimpleList list;
  list.Construct(offsetof(MyThreadData, pNext));
  for (int i=0;i<10;i++)
  {
    pData = new MyThreadData;
    pData->nShortData = i;
    list.AddHead(pData);
  } 

  //遍历链表,释放MyThreadData对象占用的空间
  pData = (MyThreadData*)list.GetHead();
  while(pData != NULL)
  {
    MyThreadData* pNextData = pData->pNext;
    printf("The value is %d\n",pData->nShortData);
    delete pData;
    pData = pNextData;
  }
} 

_AFXTLS_.H文件如下:

//#include "StdAfx.h
#ifndef __AFXTLS_H__
#define __AFXTLS_H__
#include <Windows.h>
class CSimpleList
{
public:
  CSimpleList(int nNextOffset=0);
  void Construct(int nNextOffset);
  //接口
  BOOL IsEmpty() const;
  void AddHead(void *p);
  void RemoveAll();
  void* GetHead() const;
  void* GetNext(void* preElement) const;
  BOOL Remove(void* p); 

  //为实现接口所需的成员
  void  *m_pHead;
  size_t m_nextOffset;
  void** GetNextPtr(void* preElement) const;
}; 

//类的内联函数
inline CSimpleList::CSimpleList(int nNextOffset)
  {m_pHead = NULL; m_nextOffset = nNextOffset;  } 

inline void CSimpleList::Construct(int nNextOffset)
  {m_nextOffset = nNextOffset;  } 

inline BOOL CSimpleList::IsEmpty() const
{
  return m_pHead==NULL;
}
//inline void AddHead(void *p)
//{
//
//}
inline void CSimpleList::RemoveAll()
{
  m_pHead = NULL;
}
inline void* CSimpleList::GetHead() const
{
  return m_pHead;
}
inline void* CSimpleList::GetNext(void* preElement) const
{
  return *GetNextPtr(preElement);
}
//inline BOOL CSimpleList::Remove(void* p)
//{
//
//}
inline void**  CSimpleList::GetNextPtr(void* preElement) const
{
  return (void**)((BYTE*)preElement+m_nextOffset);
} 

#endif

希望本文所述对大家的C++程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 测试
, 实现
CSimpleList
go语言实现socket实例、c语言实现list、simple list item 1、simple list item 2、simpletrigger实例化,以便于您获取更多的相关知识。

时间: 2024-11-10 00:57:55

C++中CSimpleList的实现与测试实例_C 语言的相关文章

C++在成员函数中使用STL的find_if函数实例_C 语言

本文实例讲述了C++在成员函数中使用STL的find_if函数的方法.分享给大家供大家参考.具体方法分析如下: 一般来说,STL的find_if函数功能很强大,可以使用输入的函数替代等于操作符执行查找功能(这个网上有很多资料,我这里就不多说了). 比如查找一个数组中的奇数,可以用如下代码完成(具体参考这里:http://www.cplusplus.com/reference/algorithm/find_if/): #include <iostream> #include <algori

VC++角色游戏中的人物初始化模块代码实例_C 语言

本文以一个实例讲述VC++游戏中的人物角色动画初始化实现代码,本代码只是实现人物角色动画的初始化,不包括其它功能,并不是完整的一个游戏应用,现在将这个角色初始化代码与大家分享.希望能够对大家学习VC++有所帮助. #include "StdAfx.h" #include "Character.h" CCharacter::CCharacter(void) { } CCharacter::~CCharacter(void) { } //初始化人物 bool CChar

C/C++的浮点数在内存中的存储方式分析及实例_C 语言

C/C++的浮点数在内存中的存储方式分析 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中,存放方式为  10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式.但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法.        在二进制科学表示法中,S=M*2^N 主

Cocos2d-x中CCEditBox文本输入框的使用实例_C 语言

文本输入框这个东西相信大家不论做什么游戏总会用到吧,今天我们就来看看这个东西如何使用.文本输入框同样属于扩展库中的内容,所以你知道怎么做了吧.当用户要在文本框中输入内容,这一系列的过程我们需要一些函数的调用来获得我们想要的东西,包含这些函数的类需要实现CCEditBoxDelegate这个接口,下面我们来看看具体如何使用吧. #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h"

Cocos2d-x中获取系统时间和随机数实例_C 语言

随机数是我们在程序中经常要用到的,cocos2d-x用CCRANDOM_0_1产生随机数,但我们最后给它传入一个随机数种子,这样产生的随机数才是真正的随机数,而这个种子就是我们一般使用的时间.下面通过代码看看我们如何实现. bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); //获取系统时间 //time_t是long类型,精确到秒,通过time()函数可以获得当前时间和1970年1月

C++设计模式编程中proxy代理模式的使用实例_C 语言

代理模式典型的结构图为: 实际上,代理模式的想法非常简单. 代理模式的实现: 完整代码示例(code):代理模式的实现很简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行). 代码片断 1:Proxy.h //Proxy.h #ifndef _PROXY_H_ #define _PROXY_H_ class Subject{ public: virtual ~Subject(); virtual void Request() =

C语言输出旋转后数组中的最小数元素的算法原理与实例_C 语言

  问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.      思路:这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(n).但这个思路没有利用输入数组的特性.既然有时间复杂度更小的算法,我们容易想到二分查找,因为它的时间复杂度为O(logn).这个问题是否可以运用二分查找呢

C基础 mariadb处理的简单实例_C 语言

引言 MariaDB 是一款灰常不错开源数据库. 这里直接用它来解决业务问题. 业务需求: 现在数据库中表示按照天分表的. 突然我们需要按照月来处理数据. 例如输入一个玩家id, 查找这个玩家这个月内看了一件事几次. 我们先搭建一个环境. 操作系统: Linux version 4.4.0-22-generic (buildd@lgw01-41) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #40-Ubuntu SMP Thu M

C++归并算法实例_C 语言

本文实例讲述了C++归并算法.分享给大家供大家参考.具体如下: /* 归并算法:把两个或两个以上的线性表合并在一起,形成一个新的线性表 函数模版的基本使用 程序意图:将两个相同类型的线性表元素排好序,然后将他们组合成一个排好的线性表 */ #include <iostream> using namespace std; const int n = 5; //5个元素 //输出数据元素 template <class T1> void OutPut(T1 out[(2*n)]) {