【发布时间】:2012-11-23 16:32:12
【问题描述】:
我在 std::vector 上使用 remove_if 时遇到了 lambda 表达式的小问题
我有以下一段代码:
std::remove_if( openList.begin(), openList.end(),
[&](BoardNode& i){
std::cout<< i.getCoordinates() << std::endl;
std::cout<< currentNode.getCoordinates() << std::endl;
return i.getCoordinates() == currentNode.getCoordinates(); }
);
这并没有编译器错误,但是从上述语句中返回 true 的元素不会从向量中删除;
我被打印在屏幕上,例如
[5,5]
[5,5]
但openList 保持原样。
【问题讨论】:
-
您确定错误来自第一个代码示例吗?
-
“在调试期间我没有得到我的坐标”是什么意思?据我所知,第一个示例是正确的,第二个示例是错误的,因为谓词采用迭代器而不是
BoardNode。 -
另外,标题中的“不想返回正确的类型”是什么意思?您的 lambda 正确返回
bool。 -
@juanchopanza:他需要捕获
currentNode。 -
是不是元素实际上没有从向量中删除的问题?为此,您需要擦除删除习语:`openList.erase(std::remove_if(...), openList.end());
标签: c++ vector c++11 lambda remove-if