Ada*_*adi 3 c++ c++11 c++14 c++17
我想循环一个向量并过滤掉所有非空指针元素.我正在寻找一个std检查nullptr的std函数或一个实际返回传递给它的函数的函数(比如std::forward),因为空指针会求值false.
std::copy_if(dynamicObjects.begin(), dynamicObjects.end(),
std::back_inserter(existingObjects),
std::is_pointer<ObjectType*>); // This does not compile
std::copy_if(dynamicObjects.begin(), dynamicObjects.end(),
std::back_inserter(existingObjects),
std::forward<ObjectType*>); // This does not compile either
std::copy_if(dynamicObjects.begin(), dynamicObjects.end(),
std::back_inserter(existingObjects),
static_cast<bool>); // This won't help me :)
std::copy_if(dynamicObjects.begin(), dynamicObjects.end(),
std::back_inserter(existingObjects),
[] (const auto a) { return a; } ); // This is awkward
Run Code Online (Sandbox Code Playgroud)
与东西卡住std,您可以使用std::remove_copy_if与std::logical_not.
std::remove_copy_if(dynamicObjects.begin(), dynamicObjects.end(),
std::back_inserter(existingObjects),
std::logical_not<ObjectType*>()); // or std::logical_not<> in C++14
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用remove_copy传递nullptr:
std::remove_copy(dynamicObjects.begin(), dynamicObjects.end(),
std::back_inserter(existingObjects),
nullptr);
Run Code Online (Sandbox Code Playgroud)
如果你真的很喜欢copy_if,你可以使用not_fn或not1对logical_not替代.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |