На трех указателях ясно, но ни как не могу придумать как реализовать вектор на одном указателе, не задействовав для хранение оставшихся двух указателей выделенную память. Но говорят такой вариант есть.
Возможно "Pointer to implementation":
template<class T>
class MyVector
{
public:
MyVector()
: data(0)
{
}
~MyVector()
{
for (int i = 0; i < data->size; ++i) {
data[i].~T()
}
}
void resize(size_t new_size)
{
struct AlignedData : public Data // структура для правильного учета выравнивания
{
T dummy_object;
};
void * new_data_mem = malloc(sizeof(AlignedData) + sizeof(T) * (new_size-1));
Data * new_data = new(new_data_mem) Data;
new_data->mem = &(static_cast<AlignedData*>(new_data_mem)->dummy_object);
// либо перемещение старых
for (auto i = 0; i < old_size; ++i) {
new (&new_data->mem[i]) T(std::move(data->mem[i])); // <- перемещаем элемент в новую память
}
// либо инициализация новых элементов
for (auto i = old_size; i < new_size; ++i) {
new (&new_data->mem[i]) T; // <- инициализация элементов массива
}
// либо удаление лишних элементов
for (auto i = new_size; i < old_size; ++i) {
new_data->mem[i].~T();
}
data = new_data;
}
private:
Data
{
size_t size;
size_t capacity;
T * mem;
};
Data * data; // <== один указатель
};
Тут только идея. Возможны ошибки в синтаксисе и нет проверок ошибок и прочего.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники