gpt4 book ai didi

c++ - std::find 的奇怪行为,当元素不在 vector 中时返回 true

转载 作者:太空狗 更新时间:2023-10-29 19:40:10 25 4
gpt4 key购买 nike

看起来很简单,是 std::find 的典型用法

for ( auto element : generic->vec() )
LOG << element;

LOG << channel;

if ( !gen->vec().empty() ) {

if(std::find(generic->vec().begin(), generic->vec().end(), channel) != generic->vec().end()){

LOG << "Found";
;// Found the item
} else {

LOG << "Not Found";
return false;

}
}

请检查日志文件

2018-11-08, 09:37:18 [INFO] - [140455150589696] - 1
2018-11-08, 09:37:18 [INFO] - [140455150589696] - 2
2018-11-08, 09:37:18 [INFO] - [140455150589696] - 4
2018-11-08, 09:37:18 [INFO] - [140455150589696] - 12
2018-11-08, 09:37:18 [INFO] - [140455150589696] - 40
2018-11-08, 09:37:18 [INFO] - [140455150589696] - Found

vector 包含 1,2,4,12,我们要测试它是否属于该 vector 的传入值为 40。std::find 返回 true,表示找到了。

vec() 方法返回一个 uint64_t 元素数组:

std::vector<uint64_t>  vec() const {
return vec_;
}

当我创建一个本地 vector 时,即

auto tmp = generic->vec(),

代码有效。

我的代码中的错误在哪里?我希望在检查 40 是否属于 [1,2,4,12] 时得到“未找到”。

最佳答案

问题是您的vec 函数返回 vector 按值。这意味着每次调用 vec 都会返回一个不同的不同的 vector 对象。来自不同 vector 的迭代器无法相互比较。

简单的解决方案是通过引用返回 vector :

std::vector<uint64_t> const&  vec() const { ... }

关于c++ - std::find 的奇怪行为,当元素不在 vector 中时返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205157/

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