所以我有这个定义:
using HistoryDataItemList = list<CHistoryDataItem>;
HistoryDataItemList m_listHistoryItems;
这个方法:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
bool bHasHistoryForAssignment = false;
auto iter = m_listHistoryItems.begin();
for (; iter != m_listHistoryItems.end(); iter++)
{
if (iter->GetAssignmentType() == eAssignType)
{
bHasHistoryForAssignment = true;
break;
}
}
return bHasHistoryForAssignment;
}
我知道使用像C#这样的语言可以简化代码,但是在使用较新的C ++ 11时,还可以使用MFC吗?或者我写的内容几乎就像它一样简单?
谢谢。
答案 0 :(得分:5)
最明显的改进是使用C ++ 11 &#34;范围 - for
&#34; 循环:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
bool bHasHistoryForAssignment = false;
for (auto& item : m_listHistoryItems)
{
if(item.GetAssignmentType() == eAssignType)
{
bHasHistoryForAssignment = true;
break;
}
}
return bHasHistoryForAssignment;
}
但考虑到您的代码,您真正想要的是检查任何项是否与特定谓词匹配。 There's an <algorithm>
for that!
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
return std::any_of(std::begin(m_listHistoryItems),
std::end(m_listHistoryItems),
[](const CHistoryDataItem& item)
{
return item.GetAssignmentType() == eAssignType;
});
}
或者,使用没有额外状态的for
也很容易阅读和理解:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
for (auto& item : m_listHistoryItems)
{
if(item.GetAssignmentType() == eAssignType)
return true;
}
return false;
}