繁体   English   中英

从Vector删除元素并将其他元素向下移动-C ++

Delete an element from a Vector and move rest of elements down - C++

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个'simpleVector'的向量:

struct SimpleStruct
{
    XMFLOAT3 hello;
    XMFLOAT3 hi;
};

std::vector <SimpleStruct>      simpleVector(0);

我试图删除一个元素,例如simpleVector [3],然后将其余元素向下移动一个以删除空格。

simpleVector.erase(std::remove_if(simpleVector.begin(), simpleVector.end(),
    [](int i) { return i == 3; }), simpleVector.end());

但是,我收到此错误:无法将参数1从'SimpleStruct'转换为'int'。

如果这很明显,请原谅我,我是C ++的新手。 如何解决此问题?

3 个回复

如果要删除索引3处的元素,可以执行以下操作:

simpleVector.erase(simpleVector.begin()+3);

使用std::vector ,您无需显式地“向下移动所有其他元素”,这将在erase后为您完成。

传递给std::remove_if的一元谓词需要能够接受SimpleStruct 其目的是评估是否应“删除”向量的每个元素。 您的谓词接受一个int ,并且没有从SimpleStructint转换。 您需要将谓词更改为有意义的内容。

另一方面,如果要删除simpleVector[3]的元素, simpleVector[3]需要

simpleVector.erase(simpleVector.begin() + 3);

要删除索引3处的元素,请执行以下操作:

simpleVector.erase( simpleVector.begin() + 3 );

还要注意,您不必担心将其余元素向下移动,因为矢量会自动为您处理。

由于向量将数组用作其基础存储,因此在除向量端以外的其他位置擦除元素会导致容器在将段擦除到其新位置后重新定位所有元素。 与其他类型的序列容器(例如list或forward_list)对同一操作执行的操作相比,这通常是一种低效的操作。 cplusplus.com

1 C ++删除向量中的元素

所以我创建了一个名为customer的类,你可以插入新客户,getName返回名称,getPhone返回电话号码,GetID返回ID,现在我想从该向量中删除所有内容,不知道该怎么做。 ...

3 如何有效地从vector c ++中删除元素

我有一对矢量(V1,V2)的矢量,称为以下形式的pairV1V2: 然后我需要保留以下内容: 我需要从头开始扫描pairV1V2,并且在任何两个V1不相等的地方,我需要删除V2中的交叉元素。 我写了以下代码来做同样的事情。 然而,我的代码结果非常低效,因为我的矢量对V1V2很 ...

2015-06-03 05:34:31 2 4934   c++/ c++11
5 如何不从向量C ++打印选定的元素

我需要打印出十二个带有单词和频率的文本文件(出现“单词”的次数),但这并不是要打印只出现一次的单词。 我怎么不把那些话打印出来。 我想知道如何基本上能够使用向量的2nd值来执行操作。 ...

6 在C ++中删除向量中的范围元素

我正在尝试删除向量中的一些元素,这些元素由另一个索引向量指定。 我遇到了分段错误。 我得到分段错误的原因是我的向量的大小随着元素被删除而减少,所以看起来我试图超过索引。 有人可以帮忙吗? 提前致谢 ...

7 C ++试图删除二叉树并将其移到Vector

因此,我正在尝试编写一个将二叉树的所有值放入向量的函数,该向量稍后将用于重新创建它。 但是,当我尝试调用此函数时,出现错误: 这是我正在使用的功能。 向量本身是一个包含节点的私有变量。 size()返回树的大小并且正在工作。 有人知道为什么这行不通吗? 谢谢! ...

9 c ++向量push_back移动新元素

在末尾添加元素在向量的当前最后一个元素之后,在向量的末尾添加一个新元素。 val的内容被复制(或移动)到新元素。 嗨,以上内容来自http://www.cplusplus.com/reference/vector/vector/push_back/ 我对“ move”一词有些困惑。 ...

10 从向量C ++中删除多个元素

这是一些代码,用于检查2个单元在相互攻击后是否被杀死,我通过了向量中的位置,但是当我删除一个单元时,向量的大小已更改,因此第二个单元超出范围。 如何同时删除两者? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM