Нет operator<<(std::ostream&,const std::vector<int>&)
, если вы хотите его, вам нужно предоставить свой собственный. Однако перегрузка операторов для типов, которые вам не принадлежат, не рекомендуется, поэтому я бы лучше написал функцию:
void print_vector(std::ostream& out, const std::vector<int>& vect) {
for (int i : vect) {
out << i << '\n';
}
}
, которую вы можете вызывать следующим образом
print_vector(std::cout, rotors[0].GetRotor());
В качестве альтернативы вы можете предоставить перегрузку для <<
, которая печатает все Rotor
:
std::ostream& operator<<(std::ostream&,const Rotor& rotor) {
out << rotor.position;
for (auto& i : rotor.GetRotor()) {
out << i;
}
// modify and add more to your likings
return out;
}
Как только вы это сделаете, вы также можете предоставить перегрузку для печати вектора роторов, который вы можете использовать в Enigma::PrintRotor
(который в настоящее время печатается только первый элемент вектора):
std::ostream& operator<<(std::ostream& out,const std::vector<Rotor>& rotors) {
for (const auto& r : rotors) {
out << r << '\n';
}
return out;
}
PS Ваше наименование немного сбивает с толку. Rotor
имеет GetRotor
, который возвращает permutations
!?! Я настоятельно рекомендую использовать лучшие имена. Если у меня есть Rotor r;
, тогда r
- это Rotor
, и неясно, что будет делать GetRotor
. Может быть, переименовать его в GetPermutations
?