C++ 从向量中删除一个元素,并将其余元素向下移动-C++;

C++ 从向量中删除一个元素,并将其余元素向下移动-C++;,c++,arrays,vector,struct,C++,Arrays,Vector,Struct,我有一个向量是“simpleVector”: struct SimpleStruct { XMFLOAT3 hello; XMFLOAT3 hi; }; std::vector <SimpleStruct> simpleVector(0); 但是,我得到了这个错误:无法从转换参数1 “SimpleStruct”到“int” 原谅我,如果这是显而易见的,我对C++是新的。如何解决此问题 传递给的一元谓词需要能够接受SimpleStruct。其目的是评估是否

我有一个向量是“simpleVector”:

struct SimpleStruct
{
    XMFLOAT3 hello;
    XMFLOAT3 hi;
};

std::vector <SimpleStruct>      simpleVector(0);
但是,我得到了这个错误:无法从转换参数1 “SimpleStruct”到“int”


原谅我,如果这是显而易见的,我对C++是新的。如何解决此问题

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

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

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

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

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

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

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

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

使用
std::vector
,您不需要显式地“向下移动所有其他元素”-在
擦除

后,它将为您执行此操作。如果您要删除索引3处的元素,您只需执行以下操作:

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

使用
std::vector
,您不需要显式地“向下移动所有其他元素”-它将在
擦除后为您执行此操作

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

simpleVector.erase( simpleVector.begin() + 3 );
还请注意,您不必担心将其余元素向下移动,因为向量会自动为您处理这一问题

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


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

simpleVector.erase( simpleVector.begin() + 3 );
还请注意,您不必担心将其余元素向下移动,因为向量会自动为您处理这一问题

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


您的lambda应该采用
SimpleStruct
参数,而不是
int
(或
SimpleVertex
,您的错误使我相信您实际在使用它)。您的lambda应该采用
SimpleStruct
参数,而不是
int
(或
SimpleVertex
,您的错误使我相信您实际上正在使用它)。