[英]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.