`
wx1569567608
  • 浏览: 71240 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

实现的ATL(AtlSimpleArray)数组任意插入辅助函数

 
阅读更多

前言:

   最近在写树中用到了数组,ATL中的 AtlSimpleArray 这个类封装了一个简单数组,简单高效。

正因为简单,没有带插入数据功能, 下面是我实现的一个函数,任意位置插入。 两句内存操用。 这样做有一个不好的地方是,容易产生内存碎片。 所以如果操作非常非常多 就要用List了。


look source

#include "stdafx.h"

#include <atlcoll.h>

class DemoClass

{

public:

DemoClass(int num)

{

m_num = num;

}

~DemoClass()

{

printf("析构%d\n", m_num);

}

int m_num;

};


int _tmain(int argc, _TCHAR* argv[])

{

CSimpleArray<DemoClass*> arrys;

for (int i = 0; i < 400; i ++)

{

arrys.Add(new DemoClass(i));

}

int iIndex = 4;

/////////////////////////////////////

if( ++arrys.m_nSize >= arrys.m_nAllocSize)

{

DemoClass** aT;

int nNewAllocSize = (arrys.m_nAllocSize == 0) ? 1 : (arrys.m_nSize * 2);

if (nNewAllocSize<0||nNewAllocSize>INT_MAX/sizeof(DemoClass*))

{

return FALSE;

}

aT = (DemoClass**)_recalloc(arrys.m_aT, nNewAllocSize, sizeof(DemoClass*));

if(aT == NULL)

return FALSE;

arrys.m_nAllocSize = nNewAllocSize;

arrys.m_aT = aT;


}

if (arrys.m_aT)//not null

{

memmove(&arrys.m_aT[iIndex + 1], &arrys.m_aT[iIndex], (arrys.m_nSize - iIndex - 1) * sizeof(DemoClass*));

// 5在3处插入 移动 345 

//////////////////

//

// 5插入

//  0 1 2 3 ^ 4 5 6 7 8 9 

//

}

//arrys.m_aT[iIndex] = new DemoClass(88888);

DemoClass* bbc = new DemoClass(88888);

arrys.SetAtIndex(iIndex, bbc);

int j = 0;

while(j < arrys.GetSize())

{

printf("%d\n", arrys[j]->m_num);

j++;

}

printf("%d\n", arrys.GetSize());

return 0;

}


转载于:https://my.oschina.net/u/158055/blog/694484

分享到:
评论

相关推荐

    ATL数组传递详细说明

    本文将详细介绍如何在 ATL/MFC DLL 中实现数组的有效传递,包括数组作为参数传入函数以及作为返回值从函数传出的情况。 #### 二、将数组打包到 VARIANT 在 COM 编程中,`VARIANT` 类型常用于封装多种数据类型,以...

    用 ATL ActiveX 绘制任意平面函数的曲线

    总结来说,利用ATL ActiveX绘制任意平面函数的曲线涉及到ATL COM组件的创建、`IDispatch`接口的实现、函数字符串解析、图形绘制以及控件的注册与测试。这个过程既包含了编程技术,也涵盖了数学与图形学的运用,对于...

    VC6功能完整版本安装后有插入ATL对象菜单项

    **VC6功能完整版本安装详解:插入ATL对象** Visual C++ 6.0(简称VC6)是Microsoft公司发布的一款经典且强大的C++开发工具,尤其在Windows平台上的应用程序开发中占据着重要地位。然而,不同的VC6版本在功能上有所...

    ATL.rar_ATL_ATL 界面_ATL 容器

    1. **ATL::CArray**:这是一个动态数组,允许在运行时动态增加或减少元素。它提供插入、删除、查找和遍历操作,并支持固定大小的元素类型。 2. **ATL::CMap**:类似STL的std::map,但更适用于COM环境。它存储键值对...

    ATL 技术内幕 ATL技术内幕

    同时,ATL还支持内联函数,以减少运行时的开销,提高代码执行效率。 1. ATL的基础:COM对象和接口 - COM是微软定义的一种二进制标准,允许不同进程中的对象交互。ATL简化了COM对象的创建,包括IUnknown接口的实现...

    ATL实现简单的COM

    例如,如果你有一个名为`MyInterface`的接口,你可以使用`DECLARE_INTERFACE_(MyInterface, IUnknown)`来声明它,并使用`ATL_IMPL_INTERFACE_MAP`宏来实现接口的方法。 3. **导出对象(Exported Object)**: 使用`...

    atl开发指南 atl开发指南 atl开发指南 atl开发指南 atl开发指南

    9. ** ATL事件处理**:ATL支持事件处理,通过IDispEventImpl模板,可以轻松地实现对IDispatch接口事件的支持。 10. ** ATL与WTL(Windows Template Library)**:WTL是另一款微软的C++库,专为Windows API编程提供...

    ATL使用类型库实现IDispatch接口

    本主题将深入探讨如何在ATL项目中使用类型库来实现IDispatch接口。 首先,类型库(Type Library)是COM组件中存储元数据的地方,包括接口、方法、属性等信息。通过类型库,客户端可以获取到对象的ITypeInfo接口,...

    python实现ICESat-2 ATL08转shapefile

    python实现ICESat-2 ATL08转shapefile

    用ATL实现的com (exe)

    在ATL中,使用`DECLARE_CLASSFACTORY`和`DECLARE_PROPPAGEIDS`等宏来声明类工厂和属性页,然后使用`ATL::_ATL_BASE_MODULE`或`ATL::_ATL_MODULE`来实现。 - **导出与注册**:ATL提供了自动导出和注册COM组件的功能。...

    atl 2019 头文件和库

    ATL旨在简化接口实现、减少代码量,并提高程序性能。 ATL的核心特性包括: 1. **接口实现**: ATL提供了一套宏和模板,如`DECLARE_INTERFACE_`和`BEGIN_AFX_COM_MAP`,使得开发者可以快速方便地声明和实现COM接口。...

    ATL开发指南 vc Atl编程

    4. **接口实现**:ATL通过使用宏(如DECLARE_INTERFACE_、DECLARE_PROPPAGEIDS等)简化了接口的声明和实现。这些宏将接口方法映射到成员函数,并处理IUnknown的相关操作。 5. **事件处理**:ATL支持OLE Automation...

    深入解析ATL(第2版) ATL internals 2nd Edition Working with ATL8

    本书主要介绍了ATL技术的原理、内部实现和应用技巧,由当今4 位顶尖的 Windows技术专家联合撰写。全书内容丰富,深入浅出,主要涵盖了ATL内部架构和实现方法、运用向导简化ATL开发、C++/COM/ATL中字符串的使用技巧、...

    ATL实现返回COM接口的例子

    在VB测试程序中,你可以使用`CreateObject`函数来创建ATL COM对象,并调用其接口方法。例如: ```vb Dim obj As New MyObject obj.DoSomething 42 ``` 在`com中返回com.txt`文件中,可能包含的是关于如何在已有的...

    ATL的COM工程示例

    下面将详细介绍ATL COM的相关知识点以及如何实现这个加法函数。 1. ATL基础: - ATL项目创建:首先,你需要在Visual Studio中创建一个新的ATL项目。在项目设置中,选择ATL简单对象作为模板,并为你的COM对象命名。...

    ATL开发指南代码

    4. **事件处理**:ATL提供了`BEGIN_DISPATCH_MAP`和`BEGIN_EVENT_MAP`宏,方便地实现了DISPID到成员函数的映射,简化了事件处理。 5. **服务器和控件的创建**:ATL可以用来创建EXE服务器、DLL服务器以及ActiveX控件...

    atl\ATL实现定制的IE浏览器栏·工具栏和桌面工具栏.rar

    在这个“atl\ATL实现定制的IE浏览器栏·工具栏和桌面工具栏.rar”压缩包中,包含的是使用ATL创建自定义IE浏览器栏、工具栏以及桌面工具栏的示例代码和相关资源。以下将详细讲解这些知识点。 **ATL基础知识** ATL是...

    Virsua C++的ATL高级应用

    - CAtlArray、CAtlMap、CAtlString:ATL提供的高效数据结构,用于数组、映射和字符串操作。 - CAtlModule和CAtlExeModuleT:模块类模板,用于初始化和注册COM服务器。 7. ATL与MFC(Microsoft Foundation Classes...

    使用VC++ ATL实现Office的COM插件

    ATL是一个高效、轻量级的库,专为构建COM组件而设计,简化了COM对象的实现过程。 一、COM基础 COM是微软提出的一种二进制接口标准,用于组件间的交互。它定义了一套规则和接口,使得不同语言和平台编译的组件能够...

Global site tag (gtag.js) - Google Analytics