在向量中查找NULL

Nel*_*man 6 c++ stl

我想知道一个指针向量是否包含一个NULL的条目,最好使用STL中的代码而不是写一个循环.我试过这个表达式:

std::find(dependent_events.begin(), dependent_events.end(), NULL)
Run Code Online (Sandbox Code Playgroud)

但我得到错误告诉我,我有一个"指针和整数之间的比较." 有一个更好的方法吗?

Kon*_*lph 12

NULL在C++中只是一个整数常量.指针转换隐含在适当的上下文中,但这不是一个.你需要明确地施放:

std::find(dependent_events.begin(), dependent_events.end(), static_cast<P>(0));
Run Code Online (Sandbox Code Playgroud)

P集合中指针的适当类型在哪里.或者,Eddie正确地指出了C++ 11解决方案,该解决方案应该适用于现代编译器(如果已启用C++ 11).


plain NULL不起作用的原因如下:C++禁止将整数隐式转换为指针.只有一个例外,文字值 0在初始化和指针赋值中被视为空指针(文字0充当"空指针常量",§4.10),并且NULL只是0(§18.1.4).

但是,在一个模板实例中使用时(如在上面的调用find),C++需要推断的模板类型为其每个参数和推断的类型0总是相同的:int.因此find,使用int参数调用(在函数内部,不再是文字),如上所述,int指针之间没有隐式转换.

  • 为什么选择downvote?这里有错误,我没有看到? (4认同)
  • 被误导的人也被允许投票.我已经注意到了SO和一般情况.;-) (3认同)
  • @Platium`T`是"合适的类型";-)所以我的答案是正确的.但我同意它是模糊的,我会改变它. (2认同)

Edd*_*tes 11

尝试

std::find(dependent_events.begin(), dependent_events.end(), nullptr)
Run Code Online (Sandbox Code Playgroud)

这假设您使用的是新的c ++ 11标准.

就像我在上面的评论中所说的,NULL实际上是一个#define NULL 0,一个更精确的整数.

如果不使用c ++ 11,请尝试:

std::find(dependent_events.begin(), dependent_events.end(), static_cast<void*>(NULL));
Run Code Online (Sandbox Code Playgroud)