STL中诸如vector、list等容器,使用起来安全、稳定、高效,给我们的日常开发带来了很多的便捷。某些时候因为一些特殊的需要,我们需要反向遍历容器,使用reverse_iterator、rbegin()、rend()即可实现,相关例子代码如下所示:
void CMsgLauncherListDlg::UpdateLauncherItemRect()
{
CRect rcClient;
GetClientRect( &rcClient );
CRect rcItem;
u32 dwXPos = 0;
u32 dwYPos = 0;
int nItemCount = 0;
// 反向遍历说明:当前只能显示有限数量(LATEST_MSG_LAUNCHER_DISPLAY_NUM)的消息发起者,如果当前消息发起者
// 数量大于LATEST_MSG_LAUNCHER_DISPLAY_NUM,只显示LATEST_MSG_LAUNCHER_DISPLAY_NUM个最近的消息发起者,之
// 前的消息发起者在最近的被查看后才能显示,而最近的消息发起者是放在列表尾部的
std::vector<MsgLauncher*>::reverse_iterator it = m_tMsgLauncherList.rbegin();
for ( ; it != m_tMsgLauncherList.rend(); it++ )
{
nItemCount++;
if ( nItemCount > LATEST_MSG_LAUNCHER_DISPLAY_NUM ) // 超过LATEST_MSG_LAUNCHER_DISPLAY_NUM的,暂时不再显示
{
rcItem.SetRect( 0, 0, 0, 0 );
(*it)->SetRect( rcItem );
continue;
}
rcItem.SetRect( dwXPos, dwYPos, dwXPos+rcClient.Width(), dwYPos+MSG_LAUNCHER_ITEM_HEIGHT );
(*it)->SetRect( rcItem );
(*it)->Draw( &m_memDC ); // 将消息发起者信息绘制到内存DC中
dwYPos += MSG_LAUNCHER_ITEM_HEIGHT;
}
}
反向遍历STL容器优化消息发起者显示
本文详细介绍了如何使用STL中的vector、list容器和reverse_iterator进行反向遍历,以实现仅显示指定数量的消息发起者,同时优化了内存DC绘制操作,确保高效显示最新消息发起者。
711

被折叠的 条评论
为什么被折叠?



