gpt4 book ai didi

c++ - 迭代器在最后一个元素上返回 "Junk"

转载 作者:行者123 更新时间:2023-11-30 02:31:57 26 4
gpt4 key购买 nike

我正在处理一些动态分配的数组,我知道这一定是数组的某种范围问题,但我不知道它是什么。当迭代器到达最终的相关数据点时,取消引用指向该元素的指针每次都只会打印垃圾。 m_data 是保存数据的数组,类型为 T,因为它是容器模板。任何建议将一如既往地受到赞赏。以下是一些相关的片段:

---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;
}

最佳答案

您的调整大小看起来很可疑:

void sorted<T>::resize(){

int newCapacity = (2 * m_capacity);
T *temp_array = new T[newCapacity];

所以 temp_array 是一个具有新大小的新数组

  for (int i = 0; i < m_capacity; i++)
temp_array[i] = m_data[i];

上面你已经将旧数据复制到新数组

  T *m_data = temp_array;
delete [] temp_array;

在这里(在上面的代码中)您删除了 temp_array,这是您的新数组。所以解决方法是将上面的内容替换为:

  delete [] m_data;
m_data = temp_array;

关于c++ - 迭代器在最后一个元素上返回 "Junk",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com