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