c++ - 获取元素在 std::vector 中的位置

标签 c++ stdvector

如何获取 vector 中元素的位置,其中元素是类。有办法做到这一点吗?

示例代码:

class Object
{
  public:
    void Destroy()
    {
      // run some code to get remove self from vector
    }
}

在 main.cpp 中:

std::vector<Object> objects;
objects.push_back( <some instances of Object> );
// Some more code pushing back some more stuff

int n = 20;
objects.at(n).Destroy(); // Assuming I pushed back 20 items or more

所以我想我希望能够编写一个方法或类的成员,它将返回 vector 中自身的位置...这可能吗?

编辑:

由于困惑,我应该解释得更好。

void Destroy(std::vector<Object>& container){
  container.erase( ?...? );
}

问题是,我怎样才能找到要删除的号码...?显然这是不可能的...我认为它可能不会...

最佳答案

您可以使用 std::findvector 中查找元素(假设您为 实现了比较运算符 (==) >对象。但是,有两个大问题:

  1. 如果您需要在容器中查找元素,那么使用有序容器(例如 std::mapstd::set 会获得更好的性能(在 O(log(N))O(N)
  2. 中查找操作
  3. Object 不应该是负责将其自身从容器中移除的对象。 Object 不应该知道或关心它在哪里,因为这会破坏封装。相反,容器的所有者应该关注这些任务。

关于c++ - 获取元素在 std::vector 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945822/

相关文章:

c# - 我有一个 c++ 代码需要翻译成 c#,几乎完成(我认为)但需要 P/Invoke 的帮助才能使用非托管 dll

c++ - 当唯一的区别是参数的常量性时,是否可以将两个模板函数写成一个?

c++ - Iperf 2.x 客户端如何检测它发送的流量?

c++ - 如何实现一个支持模板协变的泛型工厂?

c++ - 如何在不制作拷贝的情况下将 `std::string` 转换为 `std::vector<unsigned char>`?

c++ - 用 boost::spirit 解析成一个 vector<vector<double>>

Visual Studio 2010 中的 C++ 访问修饰符自动缩进慢慢地让我发疯——它可以改变吗?

c++ - 如何访问在 std::vector 中存储为指针的接口(interface)实现对象

c++ - 如何将 vector 的后半部分移动到另一个 vector 中?

c++ - vector 的 vector ,保留