教育目的でコンテナVectorを実装しようとしています。メソッドリザーブ
を
実装しているときに、私は質問に直面しました。それは、要素の配列をメモリ内の1つの場所(初期容量)から新しい容量に割り当てられたメモリに再配置するための最良の方法ですか?
ループを使用するか、c関数memcpyを使用するかの2つの可能性を検討します。
これが私の実装です:
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コンテナの実装が詳細に説明されている情報源にアドバイスをいただけますか(私の目的は、自分で実装を作成し、専門的な実装と比較して、知識を確認し、改善が必要な領域を見つけることです)