我需要为列表中的成员返回指针,如果所需的成员不在那里,我会得到一个空指针(或任何其他指示)
list<LINKS>::iterator find_link(list<LINKS> &link, char* ID)
{
list<LINKS>::iterator link_index;
LINKS link_i;
link_index = link.begin();
for (int i = 0; i < link.size(), i++)
{
link_i = *link_index;
if (!strcmp(link_i.ID, ID)) { return link_index; };
link_index++;
};
cout << "Node outsession does not exist " << ID;
return nullptr; // ERROR (nullptr is not the same type as list<LINKS>::iterator)
};
我添加了错误消息(cout << "Node outsession does not exist " << ID;
)以指示是否找不到链接,但是我需要为调用者函数指出。
我该怎么做? 感谢
答案 0 :(得分:2)
nullptr
不是迭代器,因此您无法在返回迭代器值的函数中返回它
std::find(begin(), end(), value)
返回一个迭代器,如果找不到该值,则返回end()
。检查一下你说:
std::list<int> l;
...
auto found = std::find(l.begin(), l.end(), 6); // returns an std::list::iterator
if (found == l.end())
{
std::cout << "Bogus!" << std::endl;
}
...
还有其他一些示例,其中容器find返回一个值,并使用特殊值“not found”
std::string s = "go to the store";
auto found = s.find('x'); // returns a size_t index into the string
if (found == std::string::npos)
{
std::cout << "Bogus!" << std::endl;
}
如果函数返回指针,则返回nullptr
会有意义。在这种情况下,nullptr
将是未找到的合理的哨兵值。
答案 1 :(得分:1)
在搜索列表时返回“未找到值”的常规方法是返回指向列表末尾的迭代器。在这种情况下link.end()
这正是来自std::find
的{{1}}算法的行为。
在你的调用函数中测试返回的迭代器,如下所示:
<algorithm>