我正在尝试实现我的容器 Vector 以用于教育目的。
在实现它的方法reserve时,我遇到了一个问题:
这是将元素数组从内存中的一个位置(初始容量)重定位到分配给新容量的内存的最佳方式吗?
我考虑了 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 容器的实施(我的目标是进行自己的实施,并与专业实施进行比较,以检查我的知识并找出需要改进的领域)