for (int i = 0; i < 4; i++) {
neurons[i].init(3);
neurons[i].setRandomWeights(-1.0, 1.0);
neurons[i].dumpWeights();
}for (auto neuron : neurons) {
neuron.init(3);
neuron.setRandomWeights(-1.0, 1.0);
neuron.dumpWeights();
}
for (auto& neuron : neurons)
std::vector требует, чтобы элементы были, по крайней мере, MoveContstructible и MoveAssignable. То есть, например, можно запросто хранить элементы вроде std::unique_ptr и std::vector, у которых нежелательно или невозможно пользоваться обычным конструктором копирования, но корректно реализована move-семантика. Ссылки, структуры с ними и прочие константы не удовлетворяют MoveAssignable, поэтому их и нельзя хранить в std::vector.
std::vector.