c++03 Инициализация массива объектов с несколькими параметрами

Это может быть простой вопрос, но я пытаюсь инициализировать массив объектов с помощью параметризованного конструктора. Например:

class A{
public:
    int b,c,d;
    A (int i, int j);
};

void A::A(int i, int j){
    d = rand()
    b = 2*i;
    c = 3*j;
}

void main(){
    A a[50]; /*Initialize the 50 objects using the constructor*/
}

Я уже пробовал с векторной инициализацией, как указано в эта ссылка однако, так как есть 2 параметра, это не работает.

Кроме того, как упоминалось в этом -a">ссылка, невозможно и утомительно вручную вводить 50 значений инициализации.

Есть ли способ проще. Кроме того, значения i,j одинаковы для всех объектов (доступны через main()), но d должно быть случайным значением и отличаться для каждого объекта.


person akki    schedule 22.09.2016    source источник


Ответы (2)


Вы можете использовать std::generate

Пример:

A generator(){ return A(1,2); }

std::generate( a, a + (sizeof(a) / sizeof(a[0])), generator );
person Community    schedule 22.09.2016
comment
Удачи с этим в C++03! (Нет лямбда-выражений до С++ 11). - person ; 22.09.2016
comment
Да, я забыл это. Обновлено - person ; 22.09.2016

Почему бы не предоставить аргументы по умолчанию для вашего конструктора с двумя аргументами?

A (int i = 0, int j = 0);

Затем он заменит конструктор по умолчанию, и A a[50]; будет использовать его автоматически 50 раз.

person Community    schedule 22.09.2016