使用STL与CMap处理CStringArray二维数组
本文主要探讨了在C++中如何处理和操作`CStringArray`类型的二维数组,以及如何结合STL和MFC中的容器类进行内存管理和数据存储。 在C++编程中,`CStringArray`是Microsoft Foundation Class (MFC) 库提供的一种字符串数组容器,用于方便地管理字符串集合。在某些情况下,我们可能需要创建二维数组来存储多行多列的数据,例如在处理表格数据时。这里将介绍两种方法实现`CStringArray`的二维数组。 1. 使用STL结构: 可以定义一个结构体`SString`,其中包含一个`CString`类型的数组,然后使用`std::list`作为容器来存储这些结构体。这样,每个`SString`实例可以视为二维数组的一行,列表中的元素代表不同的行。例如: ```cpp struct SString { CString cs[10]; }; std::list<SString> ListSString; ``` 这种方式允许灵活的行增删,但访问特定列的数据时可能需要额外的迭代。 2. 使用原始指针: 可以通过动态分配内存来创建`CString`的二维数组。需要注意的是,当释放内存时,必须按照反向的分配顺序进行,先释放行指针,再释放整个数组。例如: ```cpp CString p = new CString[nSize][10]; // ... 使用数组 ... for (int i = 0; i < nSize; i++) { delete[] p[i]; } delete[] p; ``` 在这种情况下,要小心避免内存泄漏,特别是在处理动态大小的二维数组时。 对于MFC中的`CMap`类,可以用来映射键(Key)到值(Value)。在本例中,键可能是整型(表示行索引),而值是`CStringArray`类型的指针。以下是如何使用`CMap`来存储`CStringArray`的示例: ```cpp CMapWordToPtr m_map; // Word是键类型,Ptr是值类型,此处Ptr需要是CStringArray* // 写入数据 for (int i = 0; i < 行数; i++) { for (int j = 0; j < 列数; j++) { // ... 获取当前单元格的值 ... pStringArray->Add(单元格值); } m_map.SetAt(i, pStringArray); // 将当前行的数组设置为键i对应的值 } // 读取数据 CStringArray* p = NULL; m_map.GetAt(键值)(void*&)p; // 获取指定键对应的值 CString strValue = p->GetAt(列索引); // 获取数组中特定位置的字符串 ``` 在需要创建固定大小的`CStringArray`二维数组时,可以预先分配内存,如下所示: ```cpp int nLineNum = ...; // 行数 CStringArray* m_pArrayExcelData = new CStringArray[nLineNum]; // 每个数组初始化为空 for (int i = 0; i < nLineNum; i++) { m_pArrayExcelData[i].SetSize(0); // 设置数组大小为0,表示空数组 } // 之后可以逐个添加元素到每个子数组中 ``` 通过这种方式,我们可以使用MFC的容器类结合原始指针或STL容器来处理`CStringArray`的二维数组,实现数据的存储、读取和管理。但要注意内存管理,防止内存泄漏,并确保正确释放所有分配的资源。
struct SString { CString cs[10]; };
std::list<SString> ListSString;
可是实现动态的增减元素。
2、CString** p = new CString[nSize][10];
动态的new
CString (*str)[10] = new CString[a][10];
然后就像二维数组一样使用str,使用完以后 delete [] str;
new 一个。在栈中是不能创建编译时未知大小的数组的,也就是说,CString str[a][b];这样的语法只有在a和b是常量时才能通过。
用下面的方法来初始化这个二维数组:
int a=20;
CString **str=new CString*[a];
for(int i=0;i<a;i++)
{
str[i]=new CString[10];
}
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 89
- 资源: 71
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 多功能HTML网站模板:手机电脑适配与前端源码
- echarts实战:构建多组与堆叠条形图可视化模板
- openEuler 22.03 LTS专用openssh rpm包安装指南
- H992响应式前端网页模板源码包
- Golang标准库深度解析与实践方案
- C语言版本gRPC框架支持多语言开发教程
- H397响应式前端网站模板源码下载
- 资产配置方案:优化资源与风险管理的关键计划
- PHP宾馆管理系统(毕设)完整项目源码下载
- 中小企业电子发票应用与管理解决方案
- 多设备自适应网页源码模板下载
- 移动端H5模板源码,自适应响应式网页设计
- 探索轻量级可定制软件框架及其Http服务器特性
- Python网站爬虫代码资源压缩包
- iOS App唯一标识符获取方案的策略与实施
- 百度地图SDK2.7开发的找厕所应用源代码分享