Удалить элемент из стандартного массива

Можно ли стереть определенный элемент, на который указывает итератор, из std array? Я знаю, что std vector предлагает метод erase(). Можно ли реализовать ту же логику и для std array?


person Vinod    schedule 05.08.2019    source источник
comment
Вы не можете удалить элемент массива статических размеров. Возможный дубликат: stackoverflow.com/questions/879603/   -  person mfnx    schedule 05.08.2019
comment
Документация для std::array находится в свободном доступе — вы можете увидеть все методы и тот факт, что размер фиксируется во время компиляции. Если под стиранием вы подразумеваете что-то, что можно реализовать с помощью этого интерфейса, то сделайте это.   -  person Useless    schedule 05.08.2019
comment
Возможный дубликат std::vector и std::array в C++   -  person Raedwald    schedule 05.08.2019


Ответы (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 этого сделать нельзя.

person sebrockm    schedule 05.08.2019