У меня есть список/вектор учащихся, определенный в одном файле .hpp
следующим образом:
std::vector<DecisionTree> learners_;
.
Теперь в конструкторе это используется так:
Bagging::Bagging(const DataReader& dr, const int ensembleSize, uint seed) :
dr_(dr),
ensembleSize_(ensembleSize),
learners_({}) {
random_number_generator.seed(seed);
buildBag();
}
Что происходит в конструкторе?
Пытается ли программа заполнить только два экземпляра в этом векторе, где первый — случайное число, а второй — вызов функции? Но как это работает, потому что buildBag
возвращает дерево решений, но второй аргумент возвращает целое число, и мы объявили его как вектор деревьев решений?
Почему фигурные скобки ({})
?
Поскольку я всегда программировал на java и python, это трудно понять, и это взято не из какой-либо книги, а из примера кода.
dr_(dr), ensembleSize_(ensembleSize), learners_({})
: они используются для инициализации объектных переменных класса Bagging
конкретными значениями, предоставляемыми при вызове конструктора.
({})
означает, что std::vector<DecisionTree> learners_
инициализируется просто пустым вектором через список инициализаторов (это вещь C++11).
{
random_number_generator.seed(seed);
buildBag();
}
Наконец, эти утверждения являются телом конструктора класса Bagging
. Простые команды, которые выполняются при создании объекта.
Нет необходимости инициализировать вектор пустым initializer_list. Результат по-прежнему является пустым вектором, таким же, как если бы вместо этого вектору было разрешено неявно создаваться по умолчанию.
Фигурная скобка после инициализации вектора — это начало тела конструктора Бэгинга. Ничего общего с вектором, просто он инициализирован последним.