所以我有这个定义:
using HistoryDataItemList = list<CHistoryDataItem>;
HistoryDataItemList m_listHistoryItems;
Run Code Online (Sandbox Code Playgroud)
而这种方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
我知道使用像C#这样的语言可以简化代码,但是在使用较新的C++ 11时,还可以使用MFC吗?或者我所写的内容非常简单?
谢谢.
最明显的改进是使用C++ 11 "range- for"循环:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
bool bHasHistoryForAssignment = false;
for (auto& item : m_listHistoryItems)
{
if(item.GetAssignmentType() == eAssignType)
{
bHasHistoryForAssignment = true;
break;
}
}
return bHasHistoryForAssignment;
}
Run Code Online (Sandbox Code Playgroud)
但考虑到您的代码,您真正想要的是检查是否有任何项与特定谓词匹配.有一个<algorithm>!
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;
});
}
Run Code Online (Sandbox Code Playgroud)
或者,使用for没有额外状态的a也很容易阅读和理解:
bool CHistoryData::HasHistoryForAssignment(ASSIGN_TYPE_E eAssignType)
{
for (auto& item : m_listHistoryItems)
{
if(item.GetAssignmentType() == eAssignType)
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |