рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ

рдпрд╣ рдорд╛рдирдХ рдПрд╕рдЯреАрдПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдХрдИ рдирдП рдЖрд╡рд░рдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдХрд┐ 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. рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
{ // 00001010 00001011 00001010 00001011 // * * * ** * * * ** char input[] = "\x0A\x0B\x0A\x0B"; char * input_ptr = input; int a = std::count(bit_walker(input_ptr), bit_walker(input_ptr+4), 1); EXPECT_EQ(2 + 3 + 2 + 3, a); } 

рдлреАрд▓реНрдб рдЗрдЯреНрд░реЗрдЯрд░


рдПрдХ рдлрд╝реАрд▓реНрдб рдЗрдЯрд░реЗрдЯрд░ рдПрдХ рдРрд╕рд╛ рдЗрдЯрд░реЗрдЯрд░ рд╣реИ, рдЬреЛ рдбреАрд░рд┐рдлрд╝рд░реНрдб рд╣реЛрдиреЗ рдкрд░, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдвреВрдВрдврдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

 { // What to find: [200] "puper" // // {100,"hello"} // {200,"super"} => {200,"super"} // {300,"puper"} => {300,"puper"} struct ABC { int value; std::string str; }; ABC input[] = { {100,"hello"}, {200,"super"}, {300,"puper"} }; ABC * input_ptr = input; int a = std::find(field_walker(input_ptr, fieldof(ABC,value)), field_walker(input_ptr+3, fieldof(ABC,value)), 200) - input_ptr; int b = std::find(field_walker(input_ptr, fieldof(ABC,str)), field_walker(input_ptr+3, fieldof(ABC,str)), "puper") - input_ptr; EXPECT_EQ(1, a); EXPECT_EQ(2, b); } 


рдореИрдХреНрд░реЛ рдлреАрд▓реНрдбрдСрдл (рдХреНрд▓рд╛рд╕, рдлреАрд▓реНрдб) рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 #define fieldof(Object,field) (&(((Object*)NULL)->field)) 

рдпреБрдкреАрдбреА
рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рдкреМрд░ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ , рдЖрдк рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 &Object::field 


рд╕реЙрд░реНрдЯ Iterator


рдПрдХ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ рдЬреЛ рд╕реЙрд░реНрдЯ рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рддрддреНрд╡реЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рджреМрд░рд╛рди рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦрдВрдб рдирд╣реАрдВ рд╣реИ)ред

рдЬрдм рдЗрдЯреНрд░реЗрдЯрд░ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╢реЗрд╖ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдУ (рдПрди 2 ) рд╣реИ, рд▓реЗрдХрд┐рди рдЫрдВрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдордп рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рддреА рд╣реИред Iterators рдХрджрдо рд╕реЗ рдХрджрдо рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ - рдЫрдБрдЯрд╛рдИ рднреА stepwise рд╣реИред

рдЗрдЯреНрд░реЗрдЯрд░ рдХреЛ рд╕реЙрд░реНрдЯ рдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдЖрд░реЛрд╣реА рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
 { // A:{ 5,2,1,2,2 } => A:{ 5,2,1,2,2 } // B:{ 0,0,0,0,0 } => B:{ 5,2,2,2,1 } int input[5] = { 5,2,1,2,2 }; int output[5] = { 0,0,0,0,0 }; int * input_ptr = (int *)input; int * output_ptr = (int *)output; std::copy(sorter<Descending>(input_ptr,input_ptr+5), sorter<Descending>(input_ptr+5), output_ptr); // Expect input EXPECT_EQ(5, input[0]); EXPECT_EQ(2, input[1]); EXPECT_EQ(1, input[2]); EXPECT_EQ(2, input[3]); EXPECT_EQ(2, input[4]); // Expect output EXPECT_EQ(5, output[0]); EXPECT_EQ(2, output[1]); EXPECT_EQ(2, output[2]); EXPECT_EQ(2, output[3]); EXPECT_EQ(1, output[4]); } 

рдЯрд┐рдкреНрдкрдгреА:


1. рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдпрд╣рд╛рдБ рд╕реЗ рдЙрдзрд╛рд░ рд▓реА рдЧрдИ рд╣реИ (рдЗрд╕рдореЗрдВ рдХреБрдЫ рдХреАрдбрд╝реЗ рдкрд╛рдП рдЧрдП - рд╕реНрд░реЛрдд рд╕рд╛рдЗрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рд╣реИ): http://www.cplusplus.com/reference/std/iterator/
2. рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдХреЛрдб рдЙрджрд╛рд╣рд░рдг Google C ++ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдмрдЧ рдорд┐рд▓рддрд╛ рд╣реИ - рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ)) рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкреВрд░рд╛ рдХреЛрдб рдирд┐рд╣рд┐рдд рд╣реИ: http://code.google.com/p/stliw/ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ - рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдкреБрдирд╢реНрдЪ
рдпрд╣ рд▓реЗрдЦ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдЬ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдореЗрд░реЗ рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ рдЫрд╣ рдорд╣реАрдиреЗ рдХреНрдпреЛрдВ рд▓рдЧрд╛рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдЦрддреНрдо рдпрд╛ рд░реАрдореЗрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдореИрдВ рдЕрдм рдпрд╛ рдХрднреА рдирд╣реАрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/In122283/


All Articles