簡體   English   中英

從Vector刪除元素並將其他元素向下移動-C ++

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

我有一個'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處的元素,可以執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM