调整方法intArray

时间:2015-08-11 12:45:34

标签: c++ resize

我正在为大学写一个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; };
};

1 个答案:

答案 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。这样你可以拥有一个比你需要的更大的数组,因为它需要更少的重新定位。