Дополнен 6 лет назад
Вот неправильный код для вывода. Нужно поля открывать.
copy
(
vecObjects.begin(), // итератор начала массива
vecObjects.end(), // итератор конца массива
ostream_iterator(cout, " ") //итератор потока вывода
);
Дополнен 6 лет назад
Может функцию irand(a, b); модернизировать для приёма типов MyObject и внутри неё поля раскрывать и наполнять?
Дополнен 6 лет назад
Но тогда текущий экземпляр нельзя передать в функцию через
generate(vecObjects.begin(), vecObjects.end(), [=](MyObject i) { return vecObSet(i, a, b); }); //Заполнение вектора
где написано (MyObject i) не должно быть аргументов для выдачи, иначе ошибка появится error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов
Точнее я попробовал так и эта ошибка появилась. Тогда как экземпляр для обработке получить?
Дополнен 6 лет назад
Вот такую функцию придумал, но туда нужен экземпляр.
MyObject vecObSet(MyObject i, int a, int b)
{
i.m_fPosX = irand(a, b);
i.m_fPosY = irand(a, b);
i.m_fMass = irand(a, b);
}
Дополнен 6 лет назад
int irand(int a, int b)
{
return a + rand() % (b - a + 1);
}
Тренируюсь. Создал структуру.
struct MyObject
{
float m_fPosX;
float m_fPosY;
float m_fMass;
};
В теле Main() создал вектор
vector vecObjects(20);
Как заполнить этот вектор через generate()?
generate(vecObjects.begin(), vecObjects.end(), [=]() { return irand(a, b); }); //Заполнение вектора
Строка выше не верна, но я её для примера привёл. Не верна потому что vecObjects содержит переменные типа MyObject, а заполняется int. Как в этой строке (ах) показать, что нужно в каждом экземпляре структуры нужно открыть первое поле m_fPosX и заполнить его случайными числами через лямбду [=]() { return irand(a, b); }, потом открыть второе поле и заполнить его и тоже сделать с третьим?
Затем выполняю сортировку экземпляров структуры внутри вектора по одному из полей
sort(vecObjects.begin(), vecObjects.end(), [=](MyObject i, MyObject j) {return (i.m_fPosX<j.m_fPosX); }); //Сортировка по X
И вывод не знаю тоже как через copy() показать, что нужно открывать по одному экземпляру структуры в векторе и по очереди все поля выписывать, потом другую и так далее.