按键擦除矢量元素

Posted

技术标签:

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

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

vector <vector<double> > my_vector;

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

my_vector.erase(int(specific_key));

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

【问题讨论】:

向量中没有键,只有索引... 【参考方案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】:

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

【讨论】:

以上是关于按键擦除矢量元素的主要内容,如果未能解决你的问题,请参考以下文章

擦除矢量时出现分段错误

矢量擦除迭代器超出范围[关闭]

c_cpp 使用矢量擦除实现队列

尝试在矢量上使用擦除功能时“没有匹配的调用功能”

为啥在Visual Studio中擦除位置之前矢量的c ++迭代器也无效?

矢量排序和擦除不起作用