C++ boost::algorithm::contains std::vector<;长期>&;长期价值

C++ boost::algorithm::contains std::vector<;长期>&;长期价值,c++,boost,contains,C++,Boost,Contains,我正在使用boost::algorithm::contains(std::vector,long value)并收到大量错误 std::vector<long> instance; long byteIndex; // (Perhaps more code?...) boost::algorithm::contains(instances, byteIndex); 我不认为我使用Boost有任何不同之处,只是我使用的是不同的类型。知道为什么boost::algorithm::con

我正在使用
boost::algorithm::contains(std::vector,long value)
并收到大量错误

std::vector<long> instance;
long byteIndex;
// (Perhaps more code?...)
boost::algorithm::contains(instances, byteIndex);

我不认为我使用Boost有任何不同之处,只是我使用的是不同的类型。知道为什么
boost::algorithm::contains(std::vector,long)
无法编译吗?

boost::algorithm::contains
需要两个范围,输入范围和搜索范围。出现错误是因为您提供的是第一个范围(
std::vector
),而不是第二个范围(您只提供一个
long
值)

您最好使用
std::find

std::find(vector.begin(), vector.end(), value) != vector.end()

boost::algorithm::contains
包含两个范围。您正在搜索向量中的值

在字符串示例中,您正在搜索序列
“is”
。如果要搜索
'i'
(不是序列,而是值),将得到与
向量描述的相同错误

守则:

std::vector<long> v { 1,2,3,4,5 };
std::vector<long> v1 { 3, 4 };
boost::algorithm::contains(v, v1);
std::向量v{1,2,3,4,5};
std::向量v1{3,4};
boost::algorithm::contains(v,v1);

编译很好。

请显示导致此错误的代码。
boost::algorithm::contains(std::vector,long)
是导致此错误的代码。试图编译导致错误的附加语句
请参阅正在编译的函数模板实例化“bool boost::algorithm::contains(const Range1T&,const Range2T&)”的参考。从模板的角度来看,我看不出我做错了什么。请实际展示代码,而不是仅仅描述它。@KyleLutz
boost::algorithm::contains(instances,byteIndex)
就是这样的代码,
instances
是一个std::vector,
byteIndex
是一个很长的代码。这是一个模板函数调用,因此没有更多内容可显示。您可以显示更多内容。提供一个实际的可编译示例来演示您的问题将更有帮助。我不喜欢这个实现的std::find,因为它不会向找到的对象返回bool,而是一个迭代器,并且会不必要地膨胀代码。这就是我想要
boost::algorithm::contains
的原因,因为它最接近于我所需要做的就是
std::vector(byteIndex)
的等价性,并且比较会起作用。虽然不是最优雅的,但却完成了任务。@DrewDormann更正为
std::find(vector.begin(),vector.end(),value)!=vector.end()
?@KyleLutz在
boost::algorithm::compare.hpp
中发现另一个编译器不喜欢的错误
错误C2679:binary'==':未找到基于执行
boost::algorithm::contains(std::vector,“null”)而采用“const char”类型右操作数的运算符
@Mushy:我想你误解了
boost::algorithm::contains
的功能。你希望编译
std::string(“hello”)=“h”
吗?@KyleLutz我理解你的意思;现在一切都好了。
std::vector<long> v { 1,2,3,4,5 };
std::vector<long> v1 { 3, 4 };
boost::algorithm::contains(v, v1);