1

我正在尝试自学标准模板库。目前,我正在使用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: ':' : no conversion from 'int' to 'std::_List_const_iterator<_Mylist>'”。

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;
}

如何在第二个版本中返回指向匹配项实例的指针?

4

2 回答 2

4

您需要获取迭代器引用的项目的地址:

return (it != m_Flags.end()) ? &(*it) : NULL;
于 2014-03-19T20:54:51.117 回答
3

取消引用迭代器,返回它的地址。

return (it != m_Flags.end()) ? &(*it) : NULL;

也从 const 迭代器更改。

 std::list<CCommandLineFlag>::iterator it
于 2014-03-19T20:53:14.460 回答