私はいくつかの動的に割り当てられた配列を扱っていますが、これは配列にある種の範囲の問題であることがわかりますが、何か分かりません。イテレータが最終的な関連するデータポイントに到達すると、その要素を指すポインタを逆参照すると毎回ジャンクが印刷されます。 m_dataはデータを保持する配列であり、コンテナテンプレートであるためT型です。どんな提案もいつものように高く評価されます。ここではいくつかの関連するスニペットです:Iterator最後の要素で "Junk"を返す
---From sorted.cpp---
template <class T>
typename sorted<T>::const_iterator sorted<T>::insert(T data){
if (m_size == m_capacity){
cout << "Resizing array." << endl;
resize();
}
cout << "Adding " << data << " to array." << endl;
m_size++;
m_data[m_size - 1] = data;
if (m_size > 10){ // This test output works fine.
cout << "Array should be: " << endl;
for (int i = 0; i < 11; i++)
cout << m_data[i] << " ";
cout << endl;
}
return const_iterator(&m_data[m_size - 1]);
}
template <class T>
void sorted<T>::resize(){
int newCapacity = (2 * m_capacity);
T *temp_array = new T[newCapacity];
for (int i = 0; i < m_capacity; i++)
temp_array[i] = m_data[i];
T *m_data = temp_array;
delete [] temp_array;
setCap(newCapacity);
}
---From test file---
int main() {
sorted<int> x;
sorted<int>::const_iterator itr;
// append some values into my_array x
for (int i = 1; i < 12 ; i++)
x.insert((i*i) % 19);
// my_array does not keep items in order
cout << "my_array x:" << endl;
for (itr = x.begin(); itr != x.end(); itr++)
cout << *itr << " ";
cout << endl << endl;
return 0;
}
イテレーターは正常に動作していますか? –
'T * m_data = temp_array;' - 真剣に言えば、そのメンバ関数に**宣言されていません**。かなり確かに 'm_data = temp_array;'はもっとうまくいくでしょう。 – WhozCraig
WhozCraig - あなたが正しいと思います。今私はm_dataで私の間違いを認識した。 – swingonaspiral