从 std 数组中删除元素

Vin*_*nod 2 c++ erase stdarray

是否可以删除迭代器指向的特定元素std array?我知道std vector提供了erase()方法。是否也可以实现相同的逻辑std array

seb*_*ckm 5

根据定义,std::array具有固定的大小,因此它不能提供任何改变大小的方法。

但是,您仍然可以使用其中一种删除算法。这些算法实际上不会删除任何元素,而只会将它们移动到序列的末尾,以便所有“删除”的元素都落在范围内的某个边界后面。该边界作为迭代器返回。

例子:

std::array<int, 4> arr = {0, 1, 2, 3};
auto newEnd = std::remove(arr.begin(), arr.end(), 2);
for (auto iter = arr.begin(); iter != newEnd; ++iter)
    std::cout << *iter << "\n";
Run Code Online (Sandbox Code Playgroud)

请参阅此处的实例。

但同样重要的是要明白,不会从 中删除任何内容arr。只是arr.begin()和给出的范围newEnd不再包含任何2范围。现在,std::vector您可以使用此newEnd迭代器来实际删除后面的所有内容,从而改变向量的大小。因为std::array你不能这样做。