На трех указателях ясно, но ни как не могу придумать как реализовать вектор на одном указателе, не задействовав для хранение оставшихся двух указателей выделенную память. Но говорят такой вариант есть.
Возможно "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; // <== один указатель
};
Тут только идея. Возможны ошибки в синтаксисе и нет проверок ошибок и прочего.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В кнопке numxwrite Пишет : "The method write(int) in the type BufferedWriter is not applicable for the arguments (List)" A если ввожу numx
Помогите с советом, как победить javalang
В программе имеются коричневые квадраты слева(кнопки активации настроек) при нажатии на квадрат, из него выкатывается прямоугольник такого...