рдпрд╣ рдорд╛рдирдХ рдПрд╕рдЯреАрдПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдХрдИ рдирдП рдЖрд╡рд░рдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдХрд┐ C ++ 11 рд╕реЗ рдкрд╣рд▓реЗ рдереЗред
рдЙрджреНрдШрд╛рдЯрди рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореБрдЦреНрдп рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдореЗрдВ рджреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдерд╛ред рдХрдВрдЯреЗрдирд░ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░ рдбреЗрдЯрд╛ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдЗрдХрд╛рдИ, рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред
Iterators рдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕ рддрд░рд╣, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдбреЗрдЯрд╛ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдПрд╕рдЯреАрдПрд▓ рдореЗрдВ Iterators рдХреЗ рдкреНрд░рдХрд╛рд░
рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░ рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╡рд╛рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, STL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрдИ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд╣реИрдВ:
1. back_insert_iterator рдФрд░ front_insert_iterator
2. рд╕рдореНрдорд┐рд▓рд┐рдд_рд▓реЗрдЦрдХ
3. istream_iterator рдФрд░ ostream_iterator
рдкреНрд░рдХрд╛рд░ рдХреЗ I_ators back_insert_iterator рдФрд░ front_insert_iterator, рдЬрдм рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ push_back () рдпрд╛ push_front () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рддрддреНрд╡ рдбрд╛рд▓реЗрдВред рдпреЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдмрд╕ рдХрдВрдЯреЗрдирд░ рдХреЗ рдкрд┐рдЫрд▓реЗ / рдЕрдЧрд▓реЗ рддрддреНрд╡ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Insert_iterator рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдбреЗрдЯрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдХрдВрдЯреЗрдирд░ рдФрд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Istream_iterator рдФрд░ ostream_iterator рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЗрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЛ рдПрдХ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрдЯрд░реЗрдЯрд░ рд╡рд░реНрдЧреАрдХрд░рдг
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА 5 рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ:
1. рдЗрдирдкреБрдЯ рдЗрдЯрд░реЗрдЯрд░
2. рдЖрдЙрдЯрдкреБрдЯ рдЗрдЯрд░реЗрдЯрд░
3. рдлреЙрд░рд╡рд░реНрдб рдЗрдЯрд░реЗрдЯрд░
4. рджреНрд╡рд┐рджрд┐рд╢ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗрд╡рд╛рд▓рд╛
5. рд░реИрдВрдбрдо рдПрдХреНрд╕реЗрд╕ рдЗрдЯрд░реЗрдЯрд░
рд╡рд┐рднрд┐рдиреНрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд Iterators рдорд╛рдиреНрдп рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реИред рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЗрдЯрд░реЗрдЯрд░ рд╢реНрд░реЗрдгреА | рд╕реБрд╡рд┐рдзрд╛ | рдорд╛рдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ |
---|
рд╕рднреА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ | рдЗрд╕реЗ рдЗрдореЗрдЬ рдореЗрдВ рдХреЙрдкреА рдФрд░ рдХреНрд░рд┐рдПрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | рдПрдХреНрд╕ рдмреА (рдП); рдмреА = рдП; |
рдПрдХ рд╕реЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ | ++ рдП рдП ++ * рдП ++ |
рд░реИрдВрдбрдо рдПрдХреНрд╕реЗрд╕ | рджреНрд╡рд┐рджрд┐рд╢ | рдЖрдЧреЗ | рдЗрдирдкреБрдЯ | рд╕рдорд╛рдирддрд╛ / рдЕрд╕рдорд╛рдирддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ | a == рдмреА рдП = рдмреА |
рдпрд╣ рдХреЗрд╡рд▓ рдореВрд▓реНрдп рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ dereferenced рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | * рдП a-> рдореА |
рдЙрддреНрдкрд╛рджрди | рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕рд╛рдЗрди рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | * рдП = рдЯреА * рдП ++ = рдЯреА |
| рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдФрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред | рдПрдХреНрд╕ (рдмреА); ++ a == ++ b |
| рдПрдХ рдХрд░рдХреЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ | --a рдПрдХ-- * рдП - |
| рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди + рдФрд░ - рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ | рдП + рдПрди рдПрди + рдП рдП - рдПрди рдП - рдмреА |
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рддреБрд▓рдирд╛ (<,>, <= рдФрд░> =) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ | a <b рдП> рдмреА рдЕ <= рдЦ рдП> = рдмреА |
рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ + = рдФрд░ рдХрдореА - = | рдП + = рдПрди a - = n |
рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ ([]) рджреНрд╡рд╛рд░рд╛ рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ | [[рдПрди] |
Iterator рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд┐рдХрд╛рд╕
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрд╡рд░рдг рдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ (
рдЖрд╡рд░рдг ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрдЯрд░реЗрдЯрд░ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╢реНрд░реЗрдгреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрдЯрд░реЗрдЯрд░ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╣реА рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдЙрдкрд░реЛрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
1. рдкрд╛рдВрдЪ
рдорд┐рдХреНрд╕рд┐рди рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рдЧреИрд░-рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рд╕реЗрдЯреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред
2. рдЯреЗрдореНрдкрд▓реЗрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╢реНрд░реЗрдгреА рджреНрд╡рд╛рд░рд╛ред
3.
рдорд┐рд╢реНрд░рд┐рдд рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкрд╛рдВрдЪ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮред
4. рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреЗ рд▓рд┐рдП рдлреИрдХреНрдЯрд░реА (рд╕реНрдкрд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛) рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд▓рдкреЗрдЯрдХрд░ред
[рдЖрдк рдЗрд╕ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ]рдПрдХ рдЕрдЪреНрдЫреЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрд░рдЪрдирд╛ рдХреА рдПрдХ рдЫреЛрдЯреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдИ рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рдереАред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрддреГрдкреНрдд рдирд╣реАрдВред рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╢реНрд░реЗрдгреА рдХреЗ рд╕рднреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд C ++ рднрд╛рд╖рд╛ рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдХреЗрд╡рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ рдХреЗ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рд╢реНрд░реЗрдгреА рдХреЗ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛ рдЗрдирдкреБрдЯ рд╢реНрд░реЗрдгреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ
рдФрд░ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╢реНрд░реЗрдгреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗред
рдмрд┐рдЯ рдЗрдЯрд░реЗрдЯрд░
рдПрдХ рдмрд┐рдЯ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЖрдкрдХреЛ рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдХрдВрдЯреЗрдирд░ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд┐рдЯрд░реНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдЯреИрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ:
1. рдХрдВрдЯреЗрдирд░ рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ
2. рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
{
рдлреАрд▓реНрдб рдЗрдЯреНрд░реЗрдЯрд░
рдПрдХ рдлрд╝реАрд▓реНрдб рдЗрдЯрд░реЗрдЯрд░ рдПрдХ рдРрд╕рд╛ рдЗрдЯрд░реЗрдЯрд░ рд╣реИ, рдЬреЛ рдбреАрд░рд┐рдлрд╝рд░реНрдб рд╣реЛрдиреЗ рдкрд░, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдвреВрдВрдврдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
{
рдореИрдХреНрд░реЛ
рдлреАрд▓реНрдбрдСрдл (рдХреНрд▓рд╛рд╕, рдлреАрд▓реНрдб) рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
#define fieldof(Object,field) (&(((Object*)NULL)->field))
рдпреБрдкреАрдбреАрдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
рдорд╣рд╛рдкреМрд░ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ , рдЖрдк рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
&Object::field
рд╕реЙрд░реНрдЯ Iterator
рдПрдХ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ рдЬреЛ рд╕реЙрд░реНрдЯ рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рддрддреНрд╡реЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рджреМрд░рд╛рди рд╕рдВрд╢реЛрдзрд┐рдд
рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦрдВрдб рдирд╣реАрдВ рд╣реИ)ред
рдЬрдм рдЗрдЯреНрд░реЗрдЯрд░ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╢реЗрд╖ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдУ (рдПрди
2 ) рд╣реИ, рд▓реЗрдХрд┐рди рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдордп рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рддреА рд╣реИред Iterators рдХрджрдо рд╕реЗ рдХрджрдо рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ - рдЫрдБрдЯрд╛рдИ рднреА stepwise рд╣реИред
рдЗрдЯреНрд░реЗрдЯрд░ рдХреЛ рд╕реЙрд░реНрдЯ рдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдЖрд░реЛрд╣реА рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВред
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
{
рдЯрд┐рдкреНрдкрдгреА:
1. рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдпрд╣рд╛рдБ рд╕реЗ рдЙрдзрд╛рд░ рд▓реА рдЧрдИ рд╣реИ (рдЗрд╕рдореЗрдВ рдХреБрдЫ рдХреАрдбрд╝реЗ рдкрд╛рдП рдЧрдП - рд╕реНрд░реЛрдд рд╕рд╛рдЗрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рд╣реИ):
http://www.cplusplus.com/reference/std/iterator/2. рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
Google C ++ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдмрдЧ рдорд┐рд▓рддрд╛ рд╣реИ - рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ)) рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреВрд░рд╛ рдХреЛрдб рдирд┐рд╣рд┐рдд рд╣реИ:
http://code.google.com/p/stliw/ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ - рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдкреБрдирд╢реНрдЪ
рдпрд╣ рд▓реЗрдЦ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдЬ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдореЗрд░реЗ рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ рдЫрд╣ рдорд╣реАрдиреЗ рдХреНрдпреЛрдВ рд▓рдЧрд╛рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдЦрддреНрдо рдпрд╛ рд░реАрдореЗрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдореИрдВ рдЕрдм рдпрд╛ рдХрднреА рдирд╣реАрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред