-1

我能够创建一个动态大小的整数数组,如下所示:

int *cacheL2 = new int[L2/B2];

而且我还能够创建这样的类型的对象Data

Data one(12,12);

现在我想要一个动态大小的数组Data

Data * vlaObj = new Data[L2/B2];

但它不起作用......

另外,如果你能告诉我如何让哈希值适用于 c++,那就太好了。我正在寻找示例,但所有内容都只是说#include“hash_map”但是当我尝试使用该库时,它似乎无法找到其中任何一个。

4

3 回答 3

2
#include <vector>

// ...
std::vector<Data> v;
v.emplace_back( 12, 12 );
于 2013-02-18T00:51:07.667 回答
1

这里没有理由不使用 STL 容器。建议使用std::vector而不是原始指针:

#include <vector>

//...
std::vector<Data> vlaObj(L2/B2);
vlaObj.push_back(one)

编辑:顺便说一句,L2 甚至 B2 值是否有可能0

于 2013-02-18T00:50:38.700 回答
0

Data* arr = new Data[len];不起作用的最可能原因之一是因为 typeData没有默认构造函数,即Data::Data().

但是不管Data有没有默认的构造函数,无论如何尝试创建这样的数组都不是一个好主意。一旦你动态地分配它,new[]你就承诺自己负责处理丑陋的内存管理。最好使用 STL 容器之一,例如std::vector#include <vector>必需的),它将为您处理内存管理。

然后你有几个选择:

std::vector<Data> v;                    // option 1
v.reserve(len);
// in loop:
    v.push_back(Data(x, y));            // there could be different values

std::vector<Data> v2(len);              // option 2

std::vector<Data> v3(len, Data(12,12)); // option 3

第一个选项几乎适合任何情况。它准备了足够大的内存块来保存len元素,然后你可以v方便地填充但仍然非常有效的方式。选项 2 需要Data具有默认构造函数,这由选项 3 解决,该选项使用您的自定义构造函数来构造元素。

所有提到的选项都会导致std::vector创建具有自动存储持续时间的对象。请注意,所有元素都存储在连续的内存块中,因此您可以使用&v[0]它来初始化指向其第一个元素的指针,并以与使用动态分配数组相同的方式使用它。

于 2013-02-18T01:36:51.100 回答