我正在尝试实现我的容器 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 容器的实施(我的目标是进行自己的实施,并与专业实施进行比较,以检查我的知识并找出需要改进的领域)