【问题标题】:Erasing a vector element by key按键擦除矢量元素
【发布时间】:2009-11-07 06:04:41
【问题描述】:

我定义了以下内容并用元素填充它:

vector <vector<double> > my_vector;

但我想删除具有特定键的元素...

my_vector.erase(int(specific_key));

但它不允许我。我将如何正确处理分配给该键的元素?

【问题讨论】:

  • 向量中没有键,只有索引...

标签: c++ vector encapsulation friend


【解决方案1】:

假设specific_key 是指vector 中该位置的元素:

my_vector.erase(my_vector.begin() + specific_key);

将是“最正确”的答案。

如果您要删除与 specific_key 匹配的元素(在给定示例中必须是 vector&lt;double&gt; 类型:

my_vector.erase(find(my_vector.begin(), my_vector.end(), specific_key));

【讨论】:

  • 是的,我想删除向量中该位置的元素。当我应用你加的代码(第一个)时,我的应用程序冻结了。
  • 别介意冻结是由其他原因引起的。一旦我解决了冻结问题,将对此进行测试。
  • +1,对于这两个选项。确保在擦除之前检查 end()。
【解决方案2】:

erase 接受一个迭代器作为参数。

你可以的

my_vector.erase (my_vector.begin() + specific_key);

你也可以传入一个范围

my_vector.erase (my_vector.begin(), my_vector.begin() + 2);

您应该注意的一件事是矢量的大小也会减小。

【讨论】:

    【解决方案3】:

    erase 方法将迭代器作为参数。

    Example

    【讨论】:

      【解决方案4】:

      如果特定键不是位置并且说它在向量中的一些数据,那么必须为该数据迭代向量并擦除特定的迭代器。

      【讨论】:

        猜你喜欢
        • 2020-05-10
        • 2023-04-04
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多