CTypedPtrList
template< class BASE_CLASS , class TYPE > class CTypedPtrList : public BASE_CLASS
参 数
BASE_CLASS
类 型 指 针 列 表 类 的 基 类 ; 必 须 是 一 个 指 针 列 表 类 ( CObList 或 CPtrLis t) 。
TYPE
保 存 在 基 类 列 表 中 的 元 素 的 类 型 。
说 明
CTypedPtrList 类 为 类 CPtrList 的 对 象 提 供 了 一 个 类 型 - 安 全 的 “ 包 装 ” 。 当 你使 用 CTypedPtrList 而 不 是 CObList 或 CPtrList 的 时 候 , C++ 类 型 - 检 查 工 具 帮助 消 除 由 不 匹 配 的 指 针 类 型 引 发 的 错 误 。
另 外 , CTypedPtrList 包 装 实 现 了 许 多 在 使 用 CObList 或 CPtrList 时 要 实 现 的 强制 转 换 。
因 为 所 有 的 CTypedPtrList 函 数 都 是 内 联 的 , 所 以 使 用 这 个 模 板 不 会 明 显 地 影响 你 的 代 码 的 大 小 和 速 度 。
从 CObList 派 生 的 列 表 可 以 是 连 续 的 , 但 是 从 CPtrList 派 生 的 列 表 却 不 能 。
当 一 个 CTypedPtrList 对 象 被 删 除 时 , 或 者 是 当 它 的 元 素 被 删 除 时 , 只 有 指 针被 删 除 了 , 而 它 们 所 引 用 的 项 并 没 有 被 删 除 。
有 关 使 用 CTypedPtrList 的 更 多 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章“ 集 合 ” 和 “ 基 于 模 板 的 类 ” 。
#include <afxtempl.h>
请 参 阅 CPtrList, CObList
Head/Tail Access
GetHead 返 回 列 表 的 头 元 素 ( 不 能 是 空 的 )
GetTail 返 回 列 表 的 尾 元 素 ( 不 能 是 空 的 )
Operation s
RemoveHead 从 列 表 的 头 部 删 除 元 素
RemoveTail 从 列 表 的 尾 部 删 除 元 素
AddHead 将 一 个 元 素 ( 或 另 一 个 数 组 中 的 所 有 元 素 ) 添 加
到 列 表 的 头 部 ( 产 生 一 个 新 的 头 部 )
AddTail 将 一 个 元 素 ( 或 另 一 个 数 组 中 的 所 有 元 素 ) 添 加到 列 表 的 尾 部 ( 产 生 一 个 新 的 尾 部 )
Iteratio n
GetNext 获 取 用 于 反 复 的 下 一 个 元 素
GetPrev 获 取 用 于 反 复 的 前 一 个 元 素
Retrieval/Modification
GetAt 获 取 在 一 个 给 定 位 置 处 的 元 素
SetAt 设 置 在 一 个 给 定 位 置 处 的 元 素
CTypedPtrList::AddHead
POSITION AddHead( TYPE newElement );
void AddHead( CTypedPtrList< BASE_CLASS, TYPE > * pNewList );
返 回 值
第 一 种 版 本 返 回 新 插 入 的 元 素 的 POSITION 值 。
参 数
TYPE
保 存 在 基 类 列 表 中 的 元 素 的 类 型 。
newElement
要 添 加 到 此 列 表 中 的 对 象 指 针 。 可 以 是 NULL 值。
BASE_CLASS
此 类 型 指 针 列 表 类 的 基 类 ; 必 须 是 一 个 指 针 列 表 类( CObList 或 CPtrLis t) 。
pNewList
加 到 列 表 中 。
说 明
此 成 员 函 数 调 用 BASE_CLASS ::AddHead 。 第 一 种 版 本 将 一 个 新 元 素 添 加 到 列 表的 头 元 素 之 前 。 第 二 种 版 本 将 另 一 个 列 表 中 的 元 素 添 加 到 此 列 表 的 头 元 素 之前 。
CTypedPtrList::AddTail
POSITION AddTail( TYPE newElement );
void AddTail( CTypedPtrList< BASE_CLASS, TYPE > * pNewList );
返 回 值
第 一 个 版 本 返 回 新 插 入 的 元 素 的 POSITION 值 。
参 数
TYPE
保 存 在 基 类 列 表 中 的 元 素 的 类 型 。
newElement
BASE_CLASS
此 类 型 指 针 列 表 类 的 基 类 ; 必 须 是 一 个 指 针 列 表 类( CObList 或 CPtrLis t) 。
pNewList
一 个 指 向 另 一 个 CTypedPtrList 对 象 的 指 针 。 在 pNewList 中 的 元 素 将 被 添加 到 列 表 中 。
说 明
此 成 员 函 数 调 用 BASE_CLASS ::AddTail。 第 一 种 版 本 将 一 个 新 元 素 添 加 到 列 表的 尾 元 素 之 后 。 第 二 种 版 本 将 另 一 个 列 表 中 的 元 素 添 加 到 此 列 表 的 尾 元 素 之后 。
CTypedPtrList::GetAt
TYPE & GetAt( POSITION position );
TYPE GetAt( POSITION position ) const;
返 回 值
如 果 是 通 过 一 个 指 向 const CTypedPtrList 的 指 针 访 问 此 列 表 , 则 GetAt 返 回 一个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 。 这 使 此 函 数 只 能 被 使 用 在 赋 值 语 句 的 右
边 , 这 样 就 保 护 了 列 表 不 被 修 改 。
如 果 列 表 被 直 接 访 问 , 或 通 过 一 个 指 向 CTypedPtrList 的 指 针 访 问 , 则 GetAt 返回 对 一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 的 引 用 。 这 使 得 此 函 数 可 以 使 用 在赋 值 语 句 的 任 何 一 边 , 从 而 允 许 该 列 表 可 以 被 修 改 。
参 数
TYPE
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
position
一 个 由 先 前 调 用 GetHeadPosition 或 Find 成 员 函 数 返 回 的 POSITION 值 。
说 明
一 个 类 型 为 POSITION 的 变 量 是 此 列 表 的 一 个 关 键 字 。 它 与 索 引 是 不 一 样 的 , 你 不 能 自 己 处 理 一 个 POSITION 值 。 GetAt 获 取 与 一 个 给 定 位 置 关 联 的 CObject 指 针 。
你 必 须 确 保 你 的 POSITION 值 表 示 的 是 列 表 中 的 一 个 有 效 位 置 。 如 果 它 是 无 效的 , 则 M icrosoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。
这 个 内 联 函 数 调 用 了 BASE_CLASS ::GetA t。
请 参 阅 CObList::GetAt
CTypedPtrList::GetHead
TYPE & GetHead( );
TYPE GetHead( ) const;
返 回 值
如 果 是 通 过 一 个 指 向 const CTypedPtrList 的 指 针 访 问 此 列 表 , 则 GetHead 返 回一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 。 这 使 此 函 数 只 能 被 使 用 在 赋 值 语 句 的右 边 , 这 样 就 保 护 了 列 表 不 被 修 改 。
如 果 列 表 被 直 接 访 问 , 或 通 过 一 个 指 向 CTypedPtrList 的 指 针 访 问 , 则 GetHead 返 回 对 一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 的 引 用 。 这 使 得 此 函 数 可 以 使 用在 赋 值 语 句 的 任 何 一 边 , 从 而 允 许 该 列 表 可 以 被 修 改 。
参 数
TYPE
说 明
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
此 成 员 函 数 用 来 获 取 代 表 此 列 表 中 的 头 元 素 的 指 针 。
在 调 用 GetHead 之 前 , 你 必 须 保 证 该 列 表 不 是 空 的 。 如 果 该 列 表 是 空 的 , 则M icrosoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。 可 以 使 用 IsEmpty 来 检 验 该 列 表 是 否包 含 元 素 。
请 参 阅 CPtrList::IsEmpty, CTypedPtrList::GetTail, CTypedPtrList::GetNext, CTypedPtrList::GetPrev
CTypedPtrList::GetNext
TYPE & GetNext( POSITION& rPosition );
TYPE GetNext( POSITION& rPosition ) const;
返 回 值
如 果 是 通 过 一 个 指 向 const CTypedPtrList 的 指 针 访 问 此 列 表 , 则 GetNext 返 回一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 。 这 使 此 函 数 只 能 被 使 用 在 赋 值 语 句 的右 边 , 这 样 就 保 护 了 列 表 不 被 修 改 。
如 果 列 表 被 直 接 访 问 , 或 通 过 一 个 指 向 CTypedPtrList 的 指 针 访 问 , 则 GetNext 返 回 对 一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 的 引 用 。 这 使 得 此 函 数 可 以 使 用在 赋 值 语 句 的 任 何 一 边 , 从 而 允 许 该 列 表 可 以 被 修 改 。
参 数
TYPE
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
rPosition
一 个 对 先 前 调 用 GetNext, GetHeadPosition 或 其 他 成 员 函 数 返 回 的
POSITION 值 的 引 用 。
说 明
此 成 员 函 数 用 来 获 取 由 rPosition 标 识 的 列 表 元 素 , 然 后 将 rPosition 设 置 为 列表 中 的 下 一 个 项 的 POSITION 值 。 如 果 你 是 通 过 调 用 GetHeadPosition 或CPtrList::Find 来 建 立 初 始 位 置 的 , 你 就 可 以 使 用 GetNext 来 实 现 一 个 向 前 的 反复 循 环 。
你 必 须 保 证 你 的 POSITION 值 代 表 的 是 列 表 中 的 一 个 有 效 位 置 。 如 果 位 置 是 无效 的 , 则 Microsoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。
如 果 获 取 的 元 素 是 列 表 中 的 最 后 一 个 , 则 rPosition 被 设 置 为 新 值 NULL 。在 一 个 反 复 中 删 除 一 个 元 素 是 有 可 能 的 。 参 见 CObList::RemovAt 的 示 例 。
请 参 阅 CObList::Find, CObList::GetHeadPosition, CObList::GetTailPosition, CTypedPtrList::GetPrev, CTypedPtrList::GetHead, CTypedPtrList::GetTail
CTypedPtrList::GetPrev
TYPE & GetPrev(POSITION& rPosition );
TYPE GetPrev( POSITION& rPosition ) const;
返 回 值
如 果 是 通 过 一 个 指 向 const CTypedPtrList 的 指 针 访 问 此 列 表 , 则 GetPrev 返 回一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 。 这 使 此 函 数 只 能 被 使 用 在 赋 值 语 句 的右 边 , 这 样 就 保 护 了 列 表 不 被 修 改 。
如 果 列 表 被 直 接 访 问 , 或 通 过 一 个 指 向 CTypedPtrList 的 指 针 访 问 , 则 GetPrev 返 回 对 一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 的 引 用 。 这 使 得 此 函 数 可 以 使 用在 赋 值 语 句 的 任 何 一 边 , 从 而 允 许 该 列 表 可 以 被 修 改 。
参 数
TYPE
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
rPosition
一 个 对 先 前 调 用 GetPrev 或 其 它 成 员 函 数 返 回 的 POSITION 值 的 引 用 。
说 明
此 成 员 函 数 用 来 获 取 由 rPosition 标 识 的 列 表 元 素 , 然 后 将 rPosition 设 置 为 列表 中 的 下 一 个 项 的 POSITION 值 。 如 果 你 是 通 过 调 用 GetTailPosition 或 Find 来建 立 初 始 位 置 的 , 你 就 可 以 使 用 GetPrev 来 实 现 一 个 反 向 的 反 复 循 环 。
你 必 须 保 证 你 的 POSITION 值 代 表 的 是 列 表 中 的 一 个 有 效 位 置 。 如 果 位 置 是 无效 的 , 则 Microsoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。
如 果 获 取 的 元 素 是 列 表 中 的 第 一 个 , 则 rPosition 被 设 置 为 新 值 NULL 。
请 参 阅 CPtrList::Find, CPtrList::GetTailPosition, CPtrList::GetHeadPosition, CTypedPtrList::GetNext, CTypedPtrList::GetHead, CTypedPtrList::GetTail
CTypedPtrList::GetTail
TYPE & GetTail( );
TYPE GetTail( ) const;
返 回 值
如 果 是 通 过 一 个 指 向 const CTypedPtrList 的 指 针 访 问 此 列 表 , 则 GetTail 返 回 一个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 。 这 使 此 函 数 只 能 被 使 用 在 赋 值 语 句 的 右边 , 这 样 就 保 护 了 列 表 不 被 修 改 。
如 果 列 表 被 直 接 访 问 , 或 通 过 一 个 指 向 CTypedPtrList 的 指 针 访 问 , 则 GetTail 返 回 对 一 个 类 型 由 模 板 参 数 TYPE 指 定 的 指 针 的 引 用 。 这 使 得 此 函 数 可 以 使 用在 赋 值 语 句 的 任 何 一 边 , 从 而 允 许 该 列 表 可 以 被 修 改 。
参 数
TYPE
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
说 明
此 成 员 函 数 用 来 获 取 此 列 表 中 的 头 元 素 。
在 调 用 GetTail 之 前 ,你 必 须 保 证 该 列 表 不 是 空 的 。如 果 列 表 是 空 的 ,则 M icrosoft
基 础 类 库 的 调 试 版 将 给 出 断 言 。 使 用 IsEmpty 来 检 验 列 表 是 否 包 含 元 素 。
请 参 阅 CPtrList::IsEmpty, CPtrList::Find, CPtrList::GetTailPosition, CPtrList::GetHeadPosition, CTypedPtrList::GetPrev, CTypedPtrList::GetNext, CTypedPtrList::GetHead
CTypedPtrList::RemoveHead
TYPE RemoveHead( );
返 回 先 前 在 列 表 头 部 的 指 针 。 这 个 指 针 的 类 型 由 模 板 参 数 TYPE 指 定 。
参 数
TYPE
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
说 明
此 成 员 函 数 从 列 表 的 头 部 删 除 元 素 并 返 回 这 个 元 素 。
在 调 用 RemoveHead 之 前 , 你 必 须 保 证 该 列 表 不 是 空 的 。 如 果 列 表 是 空 的 , 则M icrosoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。 使 用 IsEmpty 来 检 验 列 表 是 否 包 含 元素 。
请 参 阅 CTypedPtrList::RemoveTail, CPtrList::IsEmpty, CPtrList::GetHead, CPtrList::AddHead
CTypedPtrList::RemoveTail
TYPE RemoveTail( );
返 回 先 前 在 列 表 尾 部 的 指 针 。 这 个 指 针 的 类 型 由 模 板 参 数 TYPE 指 定 。
参 数
TYPE
指 定 保 存 在 列 表 中 的 元 素 类 型 的 模 板 参 数 。
说 明
此 成 员 函 数 从 列 表 的 尾 部 删 除 元 素 并 返 回 这 个 元 素 。
在 调 用 RemoveHead 之 前 , 你 必 须 保 证 该 列 表 不 是 空 的 。 如 果 列 表 是 空 的 , 则M icrosoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。 使 用 IsEmpty 来 检 验 列 表 是 否 包 含 元素 。
请 参 阅 CTypedPtrList::RemoveHead, CPtrList::IsEmpty, CPtrList::GetTail, CPtrList::AddTail
CTypedPtrList::SetAt
void SetAt( POSITION pos , TYPE newElement );
pos
要 被 设 置 的 元 素 的 POSITION 。
TYPE
保 存 在 基 类 列 表 中 的 元 素 类 型 。
newElement
要 被 写 入 列 表 中 去 的 对 象 指 针 。
说 明
此 成 员 函 数 调 用 BASE_CLASS ::SetA t。
一 个 类 型 为 POSITION 的 变 量 是 此 列 表 的 一 个 关 键 字 。 它 与 索 引 是 不 一 样 的 , 你 不 能 自 己 处 理 一 个 POSITION 值 。 SetAt 写 对 象 指 针 到 列 表 中 指 定 位 置 。
你 必 须 确 保 你 的 POSITION 值 表 示 的 是 列 表 中 的 一 个 有 效 位 置 。 如 果 它 是 无 效的 , 则 M icrosoft 基 础 类 库 的 调 试 版 将 给 出 断 言 。
更 多 的 细 节 说 明 , 参 见 CObList::SetA t。