如何为列表成员c ++返回空指针?

时间:2014-12-02 00:04:55

标签: c++ pointers nullpointerexception

我需要为列表中的成员返回指针,如果所需的成员不在那里,我会得到一个空指针(或任何其他指示)

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;)以指示是否找不到链接,但是我需要为调用者函数指出。

我该怎么做? 感谢

2 个答案:

答案 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>