c++ - 在 vector 中查找 NULL

标签 c++ stl

我想查明指针 vector 是否包含一个 NULL 条目,最好使用 STL 中的代码而不是编写循环。我试过这个表达式:

std::find(dependent_events.begin(), dependent_events.end(), NULL)

但是我收到错误消息,告诉我我有一个“指针和整数之间的比较”。有更好的方法吗?

最佳答案

NULL 在 C++ 中只是一个整数常量。指针转换在适当的上下文中是隐式的,但这不是一个。您需要明确转换:

std::find(dependent_events.begin(), dependent_events.end(), static_cast<P>(0));

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


普通 NULL 不起作用的原因如下:C++ 禁止将整数隐式转换为指针。只有一个异常(exception),文字值 0 在初始化和指针赋值中被视为空指针(文字 0 充当“空指针常量”,§4.10),而 NULL 只是 0(§18.1.4)。

但是当在模板实例化中使用时(例如在上面对find的调用中),C++需要为其每个参数推断模板类型以及为0<推断的类型 始终相同:int。所以 find 是用一个 int 参数调用的(在函数内部,它不再是一个 literal )并且如上所述,没有int 和指针之间的隐式转换。

关于c++ - 在 vector 中查找 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353218/

相关文章:

c++ - 为什么 char** 不能作为 C++ 中以下函数的返回类型?

c++ - 如何从 C++ 中包含大量内容的字符串中删除一行?

c++ - C++ 模板函数的重载错误

c++ - 通过套接字接收 GET 请求

c++ - STL算法/功能

c++ - Big Oh 是唯一用于衡量 STL 复杂性的符号吗

c++ - 将 char 转换为 int '23' > 23

c++ - 为什么 std::vector 可能比原始动态分配的数组更快?

c++ - 无序关联容器,最佳选择

c++ - 不可复制但可移动的容器