Можно ли стереть определенный элемент, на который указывает итератор, из std array
? Я знаю, что std vector
предлагает метод erase()
. Можно ли реализовать ту же логику и для std array
?
Удалить элемент из стандартного массива
Ответы (1)
По определению 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
этого сделать нельзя.
std::array
находится в свободном доступе — вы можете увидеть все методы и тот факт, что размер фиксируется во время компиляции. Если под стиранием вы подразумеваете что-то, что можно реализовать с помощью этого интерфейса, то сделайте это. - person Useless   schedule 05.08.2019