C++ 随机大小对象c++;

C++ 随机大小对象c++;,c++,object,random,C++,Object,Random,我一直在尝试完成一个编程练习,其中包括在数据库中分配10000个随机大小的对象[1000:0)-字节范围使用new,目的是计算new分配对象所需的时间以及delete取消分配对象所需的时间。我想知道获取随机大小对象的最佳方法是什么?我想到了一种方法,但我不确定它是否正确: // Object of varying size class Object { public: Object(int num_bytes) { vc.resize(num_bytes); } vector&

我一直在尝试完成一个编程练习,其中包括在数据库中分配10000个随机大小的对象[1000:0)-字节范围使用new,目的是计算new分配对象所需的时间以及delete取消分配对象所需的时间。我想知道获取随机大小对象的最佳方法是什么?我想到了一种方法,但我不确定它是否正确:

// Object of varying size
class Object {
public:
    Object(int num_bytes)  { vc.resize(num_bytes); }
    vector<char> vc;  // char is 1 byte
};

int n = 10000;  // number of Objects to allocate

vector<Object*> pointers;

for (int i = 0; i < n; ++i)
{
    int size = randint(1, 1000);    // random number between 1 and 1000
    Object* p = new Object(size);
    pointers.push_back(p);  // keep pointers to Objects in vector so 
                                        // can later deallocate
}
//大小不同的对象
类对象{
公众:
对象(int num_字节){vc.resize(num_字节);}
向量vc;//字符为1字节
};
int n=10000;//要分配的对象数
向量指针;
对于(int i=0;i
最简单的方法是分配字符数组:

char *obj = new char[numberOfBytes];
for(int i=0;i

我认为这段代码可以满足您的需要。

只需对拥有资源的原始循环和原始指针说不():

const int n=10000;//要分配的对象数
std::mt19937引擎{std::随机_设备{}()};
标准:统一内部分布区(11000);
向量指针;
指针。保留(n);
std::generate_n(std::back_插入器(指针),n,[&]{
返回std::unique_ptr(新字符[dist(引擎)]);
});

<代码> >取决于您使用的代码<代码>对象< /代码> -不是一个数组>代码> char < /c> >代码>对象>代码>所有的实例都是相同大小。<代码> STD::vector < /Cord>分配它的内存,并在一个单独的分配中。一个<代码> char <代码>确实是标准C++中的一个“字节”。问题是在标准C++中的一个“字节”。实际上至少有8位长。不能保证为8位(可能更多).您好,谢谢您的回复。那么使用随机大小的字符数组使用新的工作分配吗?@Fredrarson:没关系;
对象
销毁非常简单。您在这里真正做的是相对定时销毁向量本身,只是稍微间接。向量大小调整只会增加内部大小只为向量分配了缓冲区,而不是为“Object”分配了内存。您好,感谢您的回复yea,这看起来比使用类和向量成员更好
for (int i = 0; i < n; ++i)
{
    int size = randint(1, 1000);    // random number between 1 and 1000
    char* p = new char[size];
    pointers.push_back(p);
}
const int n = 10000;  // number of Objects to allocate

std::mt19937 engine{std::random_device{}()};
std::uniform_int_distribution<std::size_t> dist(1, 1000);

std::vector<std::unique_ptr<char[]>> pointers;
pointers.reserve(n);

std::generate_n(std::back_inserter(pointers), n, [&]{
    return std::unique_ptr<char[]>(new char [dist(engine)]);
});