Узнав, что std :: vector невыполнимо в чистом C ++, мне стало интересно, можно ли написать динамический массив c без вызова UB. Мы не можем сделать арифметику указателей c без массива , что означает, что мы не можем иметь динамический буфер c с частично инициализированной памятью и рассматривать его как массив; поэтому std :: vector должен опираться на реализацию, определяющую некоторое поведение, где в противном случае это было бы UB.
Dynami c Массивы - это довольно распространенные структуры данных, и, как правило, простые. Кажущаяся невозможность реализовать это соответствующим образом делает C ++ похожим на системный язык не столь общего назначения, IMO.
Поэтому мои вопросы таковы:
- Как Можно написать динамический c массив (обычный, не обязательно Контейнер) в C ++ (без использования std :: vector), который соответствует стандарту?
- Как сделать такую реализацию в пространстве-времени эффективный (предпочтительно без UB или специфика реализации c поведение)?
NB: dynamici c массив используется здесь для обозначения линейной структуры данных, которая может увеличиваться / уменьшаться «на месте», как std :: vector или, аналогично, C буфер (m), выделенный в куче.