从标准数组中删除元素
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
你不能这样做。
是否可以从 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
你不能这样做。