在我的數據結構課程中,我們正在創建一個基本的向量類。在我的頭文件中,有一個用於向矢量中插入新值的成員函數。如果我的向量容量足夠大,插入一個值,程序運行良好。但是,如果矢量需要增長,我會遇到指針錯誤。經過數小時的試圖找出發生了什麼,我相信我遇到了無效迭代器的問題。如何避免插入函數中的指針失效?
這裏是我的插入功能,並且儲備功能:
// Insert "item" before "pos", and return iterator referencing "item"
iterator insert (iterator pos, const T& item)
{
if (m_size == m_capacity)
{
reserve(m_capacity * 2);
}
T * endOfArray = (end());
while (endOfArray != pos)
{
*(endOfArray) = *(endOfArray - 1);
--endOfArray;
}
++m_size;
*pos = item;
return (pos);
}
void reserve (size_t space) {
if (space < m_capacity)
{
return;
}
T *temp_array = new T[space];
std::copy(begin(), end(), temp_array);
m_array = new T[space];
std::copy(temp_array, (temp_array + m_size), m_array);
m_capacity = space;
delete [] temp_array;
}
正如你可以看到,如果插入函數調用有向量的容量增加,那麼「POS」迭代器無效。我怎樣才能解決這個問題?
你看到了什麼錯誤?也請張貼保留和結束的代碼。 – madmik3 2010-10-03 21:09:21
彼得亞歷山大得到了你的答案。關於後備職能只有一句話。您不需要臨時緩衝區和雙重複制。你可以創建新的緩衝區,複製數據,並設置m_array。 – Dialecticus 2010-10-03 21:30:21