Я пытаюсь реализовать свой контейнер Vector в образовательных целях.
При реализации его резервного метода я столкнулся с вопросом:
это лучший способ перемещения массива элементов из одного места в памяти (исходной емкости) в память, выделенную под новую емкость?
Я рассматриваю 2 возможности: с помощью цикла или с помощью функции c memcpy.
Вот моя реализация:
template <typename T>
void MyVector<T>::reserve(int elements)
{
if (m_size >= elements) // when no need to reserve memory as at least demanded amount of memory has been already allocated
return;
m_capacity = elements;
tmp = m_array;
// allocate needed amout of memory:
m_array = new T[elements];
// copy elements ???? can I use memcpy????
for (int i = 0; i < m_size; ++i)
{
m_array[i] = tmp[i];
}
delete tmp;
}
template <typename T>
void MyVector<T>::reserve1(int elements)
{
if (m_size >= elements) // when no need to reserve memory as at least demanded amount of memory has been already allocated
return;
m_capacity = elements;
tmp = m_array;
// allocate needed amout of memory:
m_array = new T[elements];
// copy elements ???? can I use memcpy????
memcpy(m_array, tmp, m_size);
delete [] tmp;
}
Вопросы: - какие узкие места следует учитывать?
- какая разница в производительности?
- есть ли более эффективные методы?
- не могли бы вы посоветовать мне источник информации, где реализация контейнеров STL подробно описана (моя цель - сделать свою собственную реализацию и сравнить с профессиональной реализацией, чтобы проверить свои знания и выяснить, какие области нуждаются в улучшении)
delete[]
, а неdelete
. - person hmjd   schedule 22.03.2013