在shared_ptr容器中查找元素?

bqu*_*nin 5 c++ containers pointers

我在向量中找到一个元素时遇到了一些问题shared_ptr.

这是我最终得到的:

std::vector<std::shared_ptr<Block>> blocks;

bool contains(Block* block) {
  for (auto i = blocks.begin(); i != blocks.end(); ++i) {
    if ((*i).get() == block) {
      return true;
    }
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有成功,std::find甚至没有std::find_if.是否有更符合c ++的方法来实现这一目标?

编辑:这是我在答案后的代码:

bool contains(Block* block) {
  auto found = std::find_if(blocks.begin(), blocks.end(), [block](std::shared_ptr<Block> const& i){
    return i.get() == block;
  });
  return found != blocks.end();
}
Run Code Online (Sandbox Code Playgroud)

use*_*108 6

尝试:

std::find_if(blocks.begin(), blocks.end(), 
  [block](std::shared_ptr<Block> const& i){ return i.get() == block; });
Run Code Online (Sandbox Code Playgroud)

  • 您需要检查它是否不是`blocks.end()`,以查看它是否在向量中. (3认同)