从标准数组中删除元素

Erase element from std array

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

根据定义,std::array 具有固定大小,因此它无法提供任何可以更改大小的方法。

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

示例:

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";

查看实例 here

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