Прежде всего, я здесь новичок, поэтому, пожалуйста, прости меня, если я как-то не буду следовать всем правилам, касающимся Вопроса.Просто скажите мне, и я обязательно рассмотрю это в следующий раз!
Теперь мой вопрос - я должен реализовать свой собственный SET без использования ЛЮБЫХ контейнеров STL или даже умных указателей.Структура моего набора выглядит примерно так
struct Bucket {
pointer kptr{ nullptr };
Link bptr{ nullptr };
size_type nextFree;
Bucket() : kptr(new key_type[(int) N]), bptr(), nextFree(0) {}
~Bucket()
{
delete[] kptr;
kptr = nullptr;
if (bptr) delete bptr;
}
};
size_type nts, d, sz;
Link table{ nullptr };
Как и любой Контейнер, мне нужно динамически расширять мой SET - поэтому после каждого SPLIT переменная экземпляра «Table» (которая является указателем на ведро Link = Bucket*) должен расти.
Bucket *newTable = new Bucket [size+1];
Я не хочу копировать КАЖДОЕ значение каждого Bucket, на который указывает моя таблица, вручную, потому что это занимает много времени, и я получаю Тайм-аут при запуске модульного теста с1 Mio вставки.Так что я бы хотел сделать что-то вроде
for (int i = 0; i < size-1; i++) {
if (i != (nextToSplit)) {
&newTable[i] = &table[i];
//copyKeys(buf[i], table[i],i==nextToSplit);
}
Так возможен ли подобный синтаксис?Должен ли я вместо этого использовать Bucket ** newTable, и если я изменю адрес вновь созданного массива Bucket * - что произойдет с корзинами, которые были созданы новой командой?
Большое спасибо за вашу помощь!