IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> CMapStringToPtr用法 -> 正文阅读

[C++知识库]CMapStringToPtr用法

CMapStringToPtr添加与释放

头文件.h

//--------------------------------------------------------------------
	CMapStringToPtr m_prjFiles;
	CStringList m_fileList;
	CStringList m_nameList;

	typedef struct 
	{
		CString strPath;
		CString strName;
	}ST_LINE_INFO;

源文件.cpp

1、 插入元素

// 添加元素
	m_fileList.AddTail(_T("C:\\a"));
	m_fileList.AddTail(_T("C:\\b"));
	m_fileList.AddTail(_T("C:\\c"));

	m_nameList.AddTail(_T("testA"));
	m_nameList.AddTail(_T("testB"));
	m_nameList.AddTail(_T("testC"));

	//遍历CStringList变量,添加到CMapStringToPtr
	for (POSITION pos = m_fileList.GetHeadPosition(), pos1 = m_nameList.GetHeadPosition(); pos&&pos1; m_fileList.GetNext(pos), m_nameList.GetNext(pos1))
	{
		ST_LINE_INFO* fi = new ST_LINE_INFO; //一个自定义结构体
		fi->strName = m_nameList.GetAt(pos1);
		fi->strPath = m_fileList.GetAt(pos);

		void* pVoid = NULL;
		// BOOL CMapStringToPtr::LookUp(void*<key>,void*&<rvalue>)
		// 返回CString值为key的空指针
		if (m_prjFiles.Lookup(fi->strName, pVoid))
		{
			//查找元素
			delete fi;
			fi = NULL;
		}
		else
		{
			//往map添加元素
			m_prjFiles.SetAt(fi->strName, fi);
		}
	}

2、打印map元素信息按钮

//打印
void CMapStrToPtrDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	//遍历链表
	POSITION pos = m_prjFiles.GetStartPosition(); //返回第一个元素的位置
	CString info = _T("");
	while (pos)
	{
		CString fileName;
		ST_LINE_INFO* fi = NULL;
		//void* rval = NULL;
		m_prjFiles.GetNextAssoc(pos, fileName, (void*&)fi); //pos++,获取的是堆上是地址
		if (fi)
		{
			OutputDebugString(fileName+_T("\n"));
			OutputDebugString(fi->strPath+_T("\n"));
			info += (fileName + _T("\n") + fi->strPath + _T("\n"));
			fi = NULL; //使指针变量重新指向,但堆中地址仍在那里
		}
	}
	MessageBox(info);
	/*
	testC
	C:\c
	testB
	C:\b
	testA
	C:\a
	*/

}

3、删除map元素按钮

//删除
void CMapStrToPtrDlg::OnBnClickedButton2()
{
	// TODO: Add your control notification handler code here
	for (POSITION pos = m_prjFiles.GetStartPosition(); pos;){
		CString strKey;
		ST_LINE_INFO* val = NULL;  // 注意这里必须是添加时的变量类型,如果用void*,则会有内存泄露。
		m_prjFiles.GetNextAssoc(pos, strKey, (void*&)val);    // 这里把定义的变量类型转换为void*&。pos++
		if (val)
		{
			delete val; //删除指针变量指向的堆中地址内容
			val = NULL; //指针变量重新指向
		}
	}
	m_prjFiles.RemoveAll();
	MessageBox(_T("删除成功!"));
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:22:52  更:2022-05-09 12:24:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 0:36:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码