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。