CStringArray二维数组

### CStringArray 与 二维数组应用详解 在深入探讨 `CStringArray` 与二维数组的应用之前,我们首先简要了解一下 `CStringArray` 和其在 C++ 中的基本概念。 #### 一、CStringArray 概述 `CStringArray` 是 MFC(Microsoft Foundation Classes)中的一个类,用于存储和管理一组 `CString` 对象。`CString` 是 MFC 提供的一个字符串类,它封装了 C 风格字符串的各种操作,并提供了很多方便的方法来处理字符串。`CStringArray` 可以通过索引来访问或修改字符串元素,并提供了一些常用的操作方法,如添加、删除、排序等。 #### 二、CStringArray 二维数组实现方式 根据提供的部分代码片段,我们可以分析两种实现 `CStringArray` 二维数组的方式。 ### 实现方式一:使用 STL 结构体 #### 1. 结构体定义 ```cpp struct SString { CString cs[10]; }; ``` 这里定义了一个结构体 `SString`,其中包含了一个大小为 10 的 `CString` 数组 `cs`。 #### 2. 使用 `std::list` ```cpp std::list<SString> ListSString; ``` 这行代码创建了一个 `std::list` 类型的容器 `ListSString`,该容器中的每个元素都是 `SString` 类型的对象。这种方式可以动态地添加或移除 `SString` 对象。 ### 实现方式二:使用指针数组 #### 1. 动态分配内存 ```cpp CString **p = new CString*[nSize]; for (int i = 0; i < nSize; i++) { p[i] = new CString[10]; } ``` 这里通过双层指针 `p` 动态分配了一个大小为 `nSize` 的 `CString` 指针数组。接着循环遍历这个数组,并为每个元素分配大小为 10 的 `CString` 数组。这种方式可以根据实际需求动态调整数组大小,但需要手动管理内存,包括释放内存。 #### 2. 使用 CMapWordToPtr ```cpp CMapWordToPtr m_map; //... CStringArray *pStringArray = new CStringArray; //... for (int i = 0; i < /*...*/; i++) { for (int j = 0; j < /*...*/; j++) { //... pStringArray->Add(/*...*/); } m_map.SetAt(i, pStringArray); } ``` 这部分代码展示了如何使用 `CMapWordToPtr` 类型的容器来存储 `CStringArray`。`CMapWordToPtr` 是 MFC 提供的一个关联容器,它可以用来存储键值对。在这个例子中,键是整数,值是指向 `CStringArray` 的指针。通过这种方法,可以在运行时动态地存储和检索多个 `CStringArray` 对象。 ### 三、示例代码解析 #### 1. 分配内存 ```cpp CStringArray *m_pArrayExcelData; m_pArrayExcelData = new CStringArray[nLineNum]; ``` 这里创建了一个指向 `CStringArray` 数组的指针 `m_pArrayExcelData`,并为其分配内存。`nLineNum` 表示数组的大小,即 `CStringArray` 对象的数量。 #### 2. 读取 Excel 数据 ```cpp for (int i = 0; i < lgUsedRowNum; i++) { for (int j = 1; j <= lgUsedColumnNum; j++) { //... m_pArrayExcelData[i].Add(strItemName); } } ``` 这段代码展示了如何将从 Excel 中读取的数据存储到 `CStringArray` 中。外层循环遍历行,内层循环遍历列。对于每一格单元格,先获取其文本值,然后将其添加到对应的 `CStringArray` 对象中。 ### 四、总结 通过以上分析,我们可以看出 `CStringArray` 与二维数组的结合使用可以非常灵活地处理字符串数据,尤其是在处理表格数据时非常有用。同时,由于涉及到了指针和动态内存管理,因此需要注意内存的正确释放,避免内存泄漏等问题的发生。此外,在实际开发过程中,还可以考虑使用其他更现代的 C++ 标准库容器(如 `std::vector<std::vector<CString>>`),这些容器通常提供了更安全、更简洁的接口。
















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];
}

- shenshumao2014-01-07使用会出错,error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
- kangdi_sieyuan2012-05-25讲的很清楚,是从论坛中帖子内容截取过来的。看此贴能省去不少麻烦
- 「已注销」2012-10-19东西太少了,这也敢往上放

- 粉丝: 88
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 三校生计算机考试试题.doc
- 计算机及设备维护维修管理制度V(1).doc
- 中职计算机平面设计专业人才培养方案.pdf
- 计算机网络试题及答案(2).doc
- Zigbee无线通信技术(1).doc
- 直接口服饮片车间系统验证方案含风险评估有报.doc
- 计算机机房消防管理规定(2).docx
- 【编程】青少年编程等级考试∶Python编程一级试卷2.doc
- 2.通信光缆线路(直埋)工程施工及验收技术规程详解(精品文档)-共23页.pdf
- aspnet课设学生成绩基础管理系统.docx
- 《HTML+CSS网页设计与布局》教案.doc
- Java二级考试模拟试题.pdf
- 《PLC应用技术》授课计划.doc
- Unity最新PDF插件PDFRendererv5.15版本
- 人才的心理测评与选拔jsp.ppt
- 计算机基础实训报告(1).doc


