gpt4 book ai didi

c++ - 在使用 std::find() 的不成功搜索中返回特定值而不是 0

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:30 24 4
gpt4 key购买 nike

我想在列表中查找特定元素。如果没有找到我想要一个特定的值,比如返回 -1。如何为此使用 std::find()?

我读了here find() 返回指向范围 [first,last) 中比较等于 val 的第一个元素的迭代器。如果没有找到这样的元素,则该函数返回最后一个。

但这会导致模棱两可的情况:

例如:

如果列表是

0 -> 1 -> 2 -> 3

当我使用

vector<int> v(4);
v.push_back(0);
v.push_back(1);
v.push_back(2);
v.push_back(3);
vector<int>::iterator i;

i = find(v.begin(), v.end(), 4);
//Unsuccessful find, so I want a value, say -1.
cout<<*i<<endl; //this prints zero during an unsuccessful search

i = find(v.begin(), v.end(), 0);
cout<<*i<<endl; //this too prints zero which is ambiguous
//because zero was already in my list

如何摆脱这种模棱两可的情况?

最佳答案

您第一次调用 find正在返回尾后迭代器。您不能取消引用此迭代器。您有未定义的行为,因为您使用 cout<<*i<<endl; 这样做.它打印 0 的事实无关紧要。

它不会给出模棱两可的情况,因为如果失败,它会返回第二个参数的拷贝。在这种情况下,它返回 v.end() .您应该检查 std::find 是否成功了:

if (i != v.end()) {
cout<<*i<<endl;
}

关于c++ - 在使用 std::find() 的不成功搜索中返回特定值而不是 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15909637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com