Как реализовать вектор на одном указателе?

140
06 июня 2019, 22:40

На трех указателях ясно, но ни как не могу придумать как реализовать вектор на одном указателе, не задействовав для хранение оставшихся двух указателей выделенную память. Но говорят такой вариант есть.

Answer 1

Возможно "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; // <== один указатель
};

Тут только идея. Возможны ошибки в синтаксисе и нет проверок ошибок и прочего.

READ ALSO
Фон виджета в Android

Фон виджета в Android

Есть drawable, используемый в качестве фона для виджета

135
Не могу сохранить массив в текст

Не могу сохранить массив в текст

В кнопке numxwrite Пишет : "The method write(int) in the type BufferedWriter is not applicable for the arguments (List)" A если ввожу numx

143
Не могу победить java.lang.OutOfMemoryException: java heap space

Не могу победить java.lang.OutOfMemoryException: java heap space

Помогите с советом, как победить javalang

165
Как анимировать лейбл в pane c учетом размера окна программы?

Как анимировать лейбл в pane c учетом размера окна программы?

В программе имеются коричневые квадраты слева(кнопки активации настроек) при нажатии на квадрат, из него выкатывается прямоугольник такого...

134