Я хотел бы реализовать функцию, которая выбирает случайный объект из массива объектов и возвращает его мне. Это должно быть что-то вроде (в C++ вместо psuedocode):Выберите случайный объект из массива объектов
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), поэтому многие указатели/ссылки/управление памятью в целом нова для меня.
спасибо!
Что произойдет, если вы измените 'sizeof (objectList)' на 'sizeof (objectList)/sizeof (object)'? – rendon
Я все еще получаю ошибку сегментации, а стандартные выходные отчеты о том, что sizeof (objectList)/sizeof (object) равен 1 (вместо 3). Таким образом, без sizeof (object) он дает sizeof (objectList) как 8, который, как я предполагаю, связан с размером указателя? –
Ну, если у вас нет особых потребностей (какие другие операции вы будете делать с списком объектов?) С объектами и списком, я предлагаю использовать вектор. – rendon