【发布时间】:2021-07-17 16:37:45
【问题描述】:
假设我有一个 std::vector 指向一个对象的唯一指针。
#include <memory>
struct MyObject {
};
std::vector<std::unique_ptr<MyObject> myObjects;
现在假设向量填充了一些对象,我想将特定指针旋转到前面。我尝试使用像这样的find_if 函数来找到一个支点:
#include <algorithm>
void rotate_to_front(MyObject * myobject){
auto pivot = std::find_if(std::begin(myObjects), std::end(myObjects), [myObject](const MyObject & memberObject){
return myObject == memberObject;
});
}
但是clang 抛出deduced conflicting types for parameter 'Element'。
找到我的支点后,我想使用std::rotate 将其移到前面。
std::rotate(std::begin(myObjects), pivot, pivot + 1);
注意事项:
- 有没有办法用
std::find而不是std::find_if做到这一点?我也无法让它工作。
【问题讨论】:
-
向量元素是 unique_ptr,而不是 MyObject。 lambda 的参数应该是 const unique_ptr& 或 const auto&。
-
@S.M.所以正确的做法是使用
window == m_Window.get()? -
谢谢@S.M. !
标签: c++ algorithm find c++20 unique-ptr