从对象数组中选择一个随机对象

时间:2013-06-30 01:03:41

标签: c++ arrays openframeworks

我想实现一个从对象数组中选择一个随机对象并将其返回给我的函数。它应该类似于(在C ++而不是伪代码中):

getRandomObject(objectList) {
    return objectList[int(random(length of objectList))];
}

我当前的代码看起来像这样,但似乎不起作用:

//definition of random selector
object getRandomObject(Object* objectList) {
    return objectList[int(ofRandom(0, sizeof(objectList)))];
};

//create a pointer for the listOfObjects
object* listOfObjects;

//create an empty object to put the randomly selected object in
object randomObject;

//later in the code, populate the array:
object* listOfObjects[] = {
    new Object(),
    new Object(),
    new Object()
};

//select random object
randomObject = getRandomObject(listOfObjects);

但这似乎会导致分段错误。我注意到的一些问题:

sizeof()返回getRandomObject中指针的大小,而不是数组的大小。有没有一个很好的方法来获得数组的大小?它可能涉及不为数组使用float *指针。这是向量的一个很好的用例吗?

我认为问题的关键在于我是如何创建数组的,而不是我如何从中选择随机对象。我对C ++比较陌生(来自Java背景),一般来说,指针/引用/内存管理很多对我来说都是新的。

谢谢!

4 个答案:

答案 0 :(得分:3)

我看到一个明确的问题和一个可能的问题。明确的问题是sizeof(objectList)返回objectList指针的大小,在大多数平台上将是4或8。它不返回数组中objectList的元素数。传递数组的长度或使用std::vectorstd::array

第二个可能的问题与ofRandom有关。确保ofRandom(a,b)返回数字> = a,但严格来说<湾如果它返回值< = b,那么您需要我们ofRandom(0, objectVector.size() - 1)。通常,这样的函数被写入以严格地返回值< b,但你应该检查。

答案 1 :(得分:0)

C ++有一个您可能需要考虑使用的数组模板类。查看此处的文档: http://www.cplusplus.com/reference/array/array/

此类型有一个方法size(),它将返回数组的长度。

答案 2 :(得分:0)

  

当sizeof运算符应用于数组时,它会产生总数   该数组中的字节数,而不是所表示的指针的大小   通过数组标识符。   Quote

所以你把整个数组的空间分开,除以一个元素的内存需求:sizeof(objectList) / sizeof(*objectList)

答案 3 :(得分:0)

Fooz先生注意到导致段错误的问题。

其他编译问题包括:

listOfObjects声明了两种不同的类型:object*object*[3]getRandomObject期望类型为Object*

listOfObjects[]包含object*类型的元素,而getRandomObject读取Object类型的元素并返回object