簡體   English   中英

如何為列表成員C ++返回空指針?

[英]How to return null pointer for list member c++?

我需要返回列表中某個成員的指針,如果所需的成員不存在,我會得到一個空指針(或任何其他指示)

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; )以指示是否未找到鏈接,但是我需要為調用者函數指出該鏈接。

我怎樣才能做到這一點 ? 謝謝

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將是找不到的合理哨兵值。

搜索列表時,返回“找不到值”的正常接受方法是返回指向列表末尾的迭代器。 在這種情況下, link.end()

這正是<algorithm>std::find算法的行為方式。

在調用函數中,測試返回的迭代器,如下所示:

list<LINKS>::iterator itr = find_link(list, "Funyuns");
if( itr == list.end() ) {
   std::cout << "You are all out of Funyons :-(" << std::endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM