push_back и insert не работают должным образом в моем собственном векторном классе - PullRequest
1 голос
/ 23 октября 2019

Итак, вот файл заголовка, в котором я реализовал свой собственный векторный класс простым способом. Проблема в том, что, хотя код компилируется, функции-члены pushBack и insert обе не работают должным образом.

Я был бы очень рад, если бы кто-нибудь смог выяснить проблему в моем коде или найти способы, как я могу решить эту проблему.

Редактировать: код был удален в личных целях.

1 Ответ

2 голосов
/ 23 октября 2019

Для начала эта проверка в некоторых функциях-членах (например, включая insert)

if (index >= arrSize || index < 0)
                        ^^^^^^^^^^

не имеет смысла, поскольку переменная index, объявленная как имеющая тип unsigned int, никогда не может быть отрицательной. Таким образом, вы можете исключить второе подусловие оператора if.

В функции pushBack в этом цикле

        for (unsigned int i = 0; i < capacity; ++i)
        {
            arrTemp[i] = arr[i];
        }

subritute capacity для arrSize.

Также удалите оператор

capacity++;

, поскольку в этом операторе уже была увеличена емкость

arrTemp = new T[capacity += 1];

В функции insert измените этот фрагмент кода

    else if (index == capacity)
    {
        pushBack(item);
    }
    else if (0 <= index && index <= size())
    {
        arr[index] = item;
    }
*От 1025 * до
    if ( arrSize <= index )
    {
        pushBack(item);
    }
    else
    {
        arr[index] = item;
    }

И вы можете удалить элемент данных

unsigned int index;

, поскольку он не используется.

Обратите внимание, что стирание функции-члена такженеверен. По крайней мере, нет необходимости перераспределять массив и изменять его емкость. И снова здесь вдвое уменьшается емкость.

     arrTemp = new T[capacity -= 1];
     //...
     capacity--;

, то есть функция имеет те же дефекты, что и функция pushBack. И в цикле вы справляетесь со стертым элементом.

...