我正在尝试自学标准模板库。目前,我正在使用std::find()
来搜索std::list
。
我有一些代码可以测试一个项目是否存在,并且它似乎工作得很好。
inline bool HasFlag(TCHAR c)
{
std::list<CCommandLineFlag>::const_iterator it = std::find(m_Flags.begin(), m_Flags.end(), c);
return (it != m_Flags.end());
}
但是,这个版本应该返回匹配元素,不能编译。我收到错误消息“错误C2446:':':没有从'int'转换为'std :: _ List_const_iterator&lt; _Mylist&gt;'”。
inline CCommandLineFlag* GetFlag(TCHAR c)
{
std::list<CCommandLineFlag>::const_iterator it = std::find(m_Flags.begin(), m_Flags.end(), c);
return (it != m_Flags.end()) ? it : NULL;
}
如何在第二个版本中返回指向匹配项实例的指针?
答案 0 :(得分:4)
您需要获取迭代器引用的项的地址:
return (it != m_Flags.end()) ? &(*it) : NULL;
答案 1 :(得分:3)
取消引用迭代器,返回它的地址。
return (it != m_Flags.end()) ? &(*it) : NULL;
也从const迭代器更改。
std::list<CCommandLineFlag>::iterator it