0

我想定义大小的动态数组,稍后在其他函数中,修改和使用它,如下所示:hsize

类定义:

    static int size=10;

class hash{
    public:
    string h[size];
    hash();
    void resize();
    void operations();
    void print();
};

hash::hash()
{
    h[size-1]="nikhil"; //size=10 now.
}

/*Defining `h` as `string* h=new string[size];` is not working. 
My compiler (MinGW on Windows 7) show error: dynamic allocation is not allowed by default*/



 // resizing the array
    void hash::resize( )
    {
            string temp[2*size];
            for(int i=0;i<=size;i=i+1)
                {
                    temp[i]=h[i];
                }
            size=2*size;
        h=temp;
    }

    void hash::print()
    {

        for(int i=0;i<size;i=i+1)
            {if(!h[i].empty())
                {cout<<"h["<<i<<"]="<<h[i]<<endl;} 
            }
    }

int main()
{
    hash p;
    p.resize();//now size should change to 20.
    p.print();
}

问题在哪里定义大小变量或调整数组大小?

4

2 回答 2

4

std::vector如果您需要动态大小的数组,请使用。

class hash {
public:
    std::vector<std::string> h;
    hash();
    void resize();
    void operations();
    void print();
};

hash::hash() : h(10) {
    h[9] = "nikhil";
}

void hash::resize() {
    h.resize(2 * h.size());
}

虽然请注意,std::vector如果您使用添加新元素,它会自动为您调整大小push_back。另请注意,标准库已经具有哈希表数据类型 (std::unordered_setstd::unordered_map),因此您不必自己编写它们。

于 2013-10-27T17:55:03.467 回答
0

我不知道 C++,但你还没有确切地告诉发生了什么。但是你的 resize() 方法的工作方式是 for 循环经过 2*H 的大小,这会导致问题。

当您遍历 2*size 时,它​​会尝试遍历比原始数组中实际拥有的更多的项目。您必须遍历原始数组大小。

for(int i = 0; i < h.size(); i++)
{
    temp[i] = h[i];
}

我几乎看不到您代码中的注释,它们对我来说太轻了,所以我没有看到它们。

但是为了更好地解释我想,假设原始数组的大小为 5,而新数组的大小为 10,当您循环遍历 10 个项目时,原始数组中没有 10 个项目,因此在尝试访问它们时会出错。

于 2013-10-27T18:00:11.477 回答