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

标签 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* 指针。这是 vector 的一个很好的用例吗?

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

谢谢!

最佳答案

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

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

关于c++ - 从对象数组中选择一个随机对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17386115/

相关文章:

c++ - 在 for 循环 C++ 中创建变量的新实例

c++ - 将 std::wstring 转换为 cstring 是否安全?

c++ - 谁是 std::future 的创建者?

c++ - 在宏中拆分字符串

c++ - 类无法使用 C++ 中的静态变量

c - 数组游戏。为什么不更新打印?

php - 将mysql结果放在一个数组中

python - 列表和元组的行为不同

c++ - 我的 PRNG 实现与我要复制的实现有何不同?

c++ - 很奇怪的 MinGW ld 问题 - "collect2: ld returned 1 exit status"