Это на самом деле сложный вопрос.Я не знаю учебный план вашего класса, но я вижу, что введение в стандартную библиотеку имеет много нюансов.
Итератор - полноценный объект.Он действительно ничего не знает о вашей структуре солдата.Он знает, как работать с std :: list, который содержит ваши припои.Он полон перегруженных операторов.И в этот момент я вижу, где вода становится грязной.То есть вы еще не узнали о перегрузке операторов, но собираетесь использовать?Ожидается, что вы будете обращаться с итератором как с черным ящиком, поэтому вы должны слепо следовать определенным правилам.В этом случае вам следовало сказать, что итератор имеет доступ к вашим объектам в контейнере, и единственный способ добраться до этого объекта - использовать магию it->thing
.
Если вы узнали оперегрузка должна быть указана на то, что -> является перегрузкой итератора.оператор возвращает указатель на ваш объект.Или, по крайней мере, вы можете просто думать об итераторе как о сыром указателе, он выглядит так же.Вы уже знакомы с указателями?
И, как он появился.
for( auto& item : container )...;
Является ли языковая конструкция.Он просто делает то же самое, что и:
for (it = company.begin(); it != company.end(); it++)
{
auto& item= *it;
std::cout << item.index << std::endl;
}
И снова, обрабатывая итератор как указатель, на этот раз используя оператор звездочки.
https://en.cppreference.com/w/cpp/language/operator_member_access#Built-in_indirection_operator
Если вы собираетесь стать опытным программистом на C ++, вам необходимо изучить, как работает язык и стандартная библиотека.
Также, пожалуйста, избавьтесь от привычки:
using namespace std;