【问题标题】:Erase element from std array从标准数组中擦除元素
【发布时间】:2019-08-05 10:13:37
【问题描述】:

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

【问题讨论】:

标签: c++ erase stdarray


【解决方案1】:

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

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

例子:

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,您不能这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多