首页 > 解决方案 > 从标准数组中擦除元素

问题描述

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

标签: c++erasestdarray

解决方案


根据定义,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";

在这里查看一个活生生的例子。

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


推荐阅读