我正在为大学写一个IntArray
课程,但不知道如何有效地编写我的resize
方法。我所拥有的不支持调整大小的列表,我不知道如何解决这个问题..
这是我的代码:
void IntArray::resize(unsigned int size){
for (int i = size;i<length;i++){
data[i] = 0;
}
length = size;
}
头文件
#ifndef INTARRAY_H_
#define INTARRAY_H_
#include <iostream>
using namespace std;
class IntArray{
private:
int length;
int * data;
public:
IntArray(int size = 0);
IntArray(const IntArray& other);
IntArray& operator=(const IntArray& original);
int getSize() const { return length; };
int& operator[](unsigned int i);
void resize(unsigned int size);
void insertBefore(int value, int index);
friend ostream& operator<<(ostream& out, const IntArray& list);
~IntArray(){ delete[] data; };
};
答案 0 :(得分:1)
当您需要调整大小时,您实际上要创建一个新数组,将旧文件复制到新数组中,然后删除旧数组。
void IntArray::resize(unsigned int size){
if (size <= length) // if we are making it smaller reset the size and do nothnig
{
my_size = size
return;
}
int * temparr = new int[size];
// copy data
for (unsigned int i = 0; i < length; ++i)
temparr[i] = data[i];
delete [] data; // get rid of the old array
data = temparr; // set data to the new array
length = size; // set the new size
}
您还应该有一个容量成员跟踪数组的实际大小,如std::vector
。这样你可以拥有一个比你需要的更大的数组,因为它需要更少的重新定位。