Расширьте свой СОБСТВЕННЫЙ внедренный SET, перемещая адреса Bucket - PullRequest
0 голосов
/ 25 мая 2018

Прежде всего, я здесь новичок, поэтому, пожалуйста, прости меня, если я как-то не буду следовать всем правилам, касающимся Вопроса.Просто скажите мне, и я обязательно рассмотрю это в следующий раз!

Теперь мой вопрос - я должен реализовать свой собственный 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 * - что произойдет с корзинами, которые были созданы новой командой?

Большое спасибо за вашу помощь!

...