рд╕рднреА рдХреЛ рдмрдзрд╛рдИ!
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдореИрдВрдиреЗ "C ++ рдЯрд╛рд╕реНрдХ рдореИрд░рд╛рдерди" рд╕реЗ рдЬрд╛рд╕реВрд╕реА рдХреА (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреЛрдЬ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред рдирд╣реАрдВ, рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдЯ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╣рдм рд╕реЗ рд╕реАрдЦрд╛ рд╣реИ: рдпрд╛ рддреЛ рдореЗрд░реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рдерд╛ рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╖рдбреНрдпрдВрддреНрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╖рдп рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред рдореИрдВрдиреЗ рд░рд╛рд╣рдд рдХреА рд╕рд╛рдВрд╕ рд▓реА ... рдЗрд╕рд▓рд┐рдП, рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреЗрд╡рд▓ 9 рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреАрдВ):
- рднреВрд▓ рдЧрдП рдХрд┐ рдХреИрд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реИред рдорджрдж!
рдЧреБрдгрд╛ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 7 рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВред
- рдПрдХ рдореЗрдВ рджреЛред
рдХрд┐рд╕реА рдЬрд╛рдирдХрд╛рд░ рдиреЗ рд▓рд┐рдлреНрдЯ рдореЗрдВ рд▓рдЧреЗ рдмрдЯрди рдХреЛ рд╕реНрд╡реИрдк рдХрд┐рдпрд╛ред рдкрд╣рд▓реА рдордВрдЬрд┐рд▓ рдХреЗ рдмрдЬрд╛рдп рджреВрд╕рд░реА рдордВрдЬрд┐рд▓ рд░рдЦреЛ, рдФрд░ рджреВрд╕рд░реА рдХреЗ рдмрдЬрд╛рдп рдкрд╣рд▓реА рдордВрдЬрд┐рд▓ред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдмрдЯрди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред рдореИрдВ рд▓рд┐рдлреНрдЯ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред рд╕рднреА рдЖрдкрд╕реЗ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдПрдХ рд╕реНрд╡рд┐рдЪ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ 1 рдЗрдирдкреБрдЯ 2 рдФрд░ 2 рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдЗрдирдкреБрдЯ 1ред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдордиреЛрд░рдВрдЬрдХ" (рдФрд░, рд╕рдВрднрд╡рддрдГ, рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ) рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рддреИрдпрд╛рд░ рдирд╣реАрдВ (рдЦреАрдВрдЪрд╛ рд╣реБрдЖ) рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░, рдпрд╣ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдмрд╛рд╣рд░ рдХрд╛ рд╕реБрдВрджрд░ рдореМрд╕рдо рд╣реИ, рдпрд╛ рдпрд╣ рдХрд╛рдо-рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдмрд╣рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЕрдкрдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдерд╛, рдореБрдЭреЗ C ++ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореИрд░рд╛рдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ (3 рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рдЪрдХреНрд░ рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ) рдЖрдпрд╛ред рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдкреНрд░рдмрд▓ рд╣реБрдИ рдФрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛: рд▓реЗрдХрд┐рди рд╕рд┐рд░ рдореЗрдВ рдирд╣реАрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд▓реЗрдХрд┐рди рдХрд╛рдЧрдЬ рдкрд░ред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдкрд╣рд▓реА рдкрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдпрд╣ рднреНрд░рдордкреВрд░реНрдг рдкрд╛рда (рдХрд╛рдЧрдЬ рдкрд░ рд▓рд┐рдЦрдирд╛) рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рд╕рдВрдкрд╛рджрдХ (gedit) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░, рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, Googleред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ
рд╕рдордп рдХреА рд╕рдВрдЦреНрдпрд╛:
рднреВрд▓ рдЧрдП рдХрд┐ рдХреИрд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реИред рдорджрдж! рдЧреБрдгрд╛ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 7 рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВред
рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдирд┐рд╖реНрдкрд╛рджрди рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╕реНрд╡рдпрдВ рд╕реБрдЭрд╛рддрд╛ рд╣реИ:
- рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 7 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ 7 рд▓рдЧрд╛рддрд╛рд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдкрд░рд┐рдгрд╛рдо (рд░рдирдЯрд╛рдЗрдо) рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
рдЖрдк рдЗрд╕ рдкрд░ рдПрдХ рд▓реЗрдЦ рдирд╣реАрдВ рдмрдврд╝рд╛ рд╕рдХрддреЗред рдЪрд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд▓реЗрддреЗ рд╣реИрдВ: рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ - рдПрдХ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдареАрдХ 7 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдЕрд╡реНрдпрд╡рд╕реНрдерд╛: рдЖрдк рдЧреБрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЧреБрдгрди рджреЗрддреЗ рд╣реИрдВ:
- рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрди рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд▓реВрдк рдореЗрдВ рдПрди рд▓рдЧрд╛рддрд╛рд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо (рд░рдирдЯрд╛рдЗрдо) рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
- рдПрдХ рдорд╛рдирдХреАрдХреГрдд рд╡рд░реНрдЧ рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрди рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдПрди рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрд░рд┐рд╡рд░реНрдзрди рдХрд░рддрд╛ рд╣реИ, рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рдХрдХреНрд╖рд╛ рдХреЗ рд╕реНрдерд┐рд░ рдХрд╛рд╕реНрдЯ рд╕рджрд╕реНрдп (рд╕рдВрдХрд▓рди) рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ:
рд╣рд╛рдВ, рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк "рдлреНрд▓рд╛рдИ рдкрд░" рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛: рдореБрдЭреЗ рдЕрдкрдиреА рд╕реНрдореГрддрд┐ рдореЗрдВ
рдлреИрдХреНрдЯрд░рд┐рдпрд▓ рдЧрдгрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддрд╛рдЬрд╝рд╛ рдХрд░рдирд╛ рдерд╛
, рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рди рд╣реИред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛, рдЬреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдмрдирд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИ, рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ (рддрд╛рд░реНрдХрд┐рдХ) рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг:
template <int times, typename T> inline T mulbyNct(T value) { return mulStep<T, value, times>::partSumm; }
"рдЭреВрда рдмреЛрд▓реЛ, рдпрд╛рд░," рдЪреМрдХрд╕ рдкрд╛рдардХ рдХрд╣реЗрдЧрд╛ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЗ
result
рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪрдХреНрд░ рдХреЗ рдПрдХ рдЪрд░рдг рдкрд░ рдмрдЪрдд рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
"рдЕрднреА рднреА рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ," рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдФрд░,
рдЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реБрдП, рдлрдВрдХреНрд╢рдирд▓рд░реНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЪреМрдереЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ:
- рдУрд╣ рдпрд╣ рдЪреМрдерд╛ рд╡рд┐рдХрд▓реНрдк:
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╢рд╛рджреА рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдРрд╕реЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ... рд▓реЗрдХрд┐рди рдЕрдм рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдорд╛рдзрд╛рди "рдмреЗрд╣рддрд░" рд╣реИ, рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рддреБрд▓рдирд╛ рдХреЗ рдореАрдЯреНрд░рд┐рдХ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП - рдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдиреНрдпреВрдирддрдо рдЙрддреНрдкрд╛рдж рдХреА рдореАрдЯреНрд░рд┐рдХ:
algo_diff = used_mem * calc_time;
algo_winner = min(algo_diff(1, 2, 3, ..., N))
рдФрд░ рдореМрд╕рдо рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рддреЗрдЬреА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рд▓рдбрд╝рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░реЛ
рдЖрдЗрдП рдЙрди рдЪреАрдЬреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рдореИрдВ рдЦреБрдж рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ "рдЯрд╛рдЗрдорд░"ред рдорд╛рдк рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдПрдХ рдмрд╛рд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╡рд░реНрдЧ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╣ рдЖрд░рдПрдЖрдИрдЖрдИ рд╕рд┐рджреНрдзрд╛рдВрдд (рд╣рд╛рдБ, Google рдлрд┐рд░ рд╕реЗ рдорджрдж) рдХреЗ рдПрдХ рдЭрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдФрд░ рд╡реЙрдпрд▓рд╛ рдкрд░ рд░рдЦрд╛:
#include <stdio.h> #include <string> #include <sys/time.h> #include <sys/timeb.h> class StackPrinter { public: explicit StackPrinter(const char* msg) : msMsg(msg) { fprintf(stdout, "%s: --begin\n", msMsg.c_str()); mfStartTime = getTime(); } ~StackPrinter() { double fEndTime = getTime(); fprintf(stdout, "%s: --end (duration: %.10f sec)\n", msMsg.c_str(), (fEndTime-mfStartTime)); } void printTime(int line) const { double fEndTime = getTime(); fprintf(stdout, "%s: --(%d) (duration: %.10f sec)\n", msMsg.c_str(), line, (fEndTime-mfStartTime)); } private: double getTime() const { timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + tv.tv_usec / 1000000.0; } ::std::string msMsg; double mfStartTime; }; // Use case // //{ // StackPrinter("Time to sleep") sp; // sleep(5000); //}
рд▓реЗрдХрд┐рди, рдпрд╣ "рдкреНрд░рд┐рдВрдЯрд░" рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдФрд░ рдореИрдВ LabPlot (
LabPlot sourceforge ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрдЙрдЯрдкреБрдЯ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдЖрдк рдЦреВрдиреА рдЖрдБрд╕реВ рдХреЗ рд╕рд╛рде рд░реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ DRY рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ (рдЦреВрдиреА рдЖрдБрд╕реВ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рджреЗрдЦрд╛ рдерд╛ред рдФрд░ рдЖрдо рддреМрд░ рдкрд░, рдЧрд░реНрдо рдореМрд╕рдо рдФрд░ рдардВрдбреЗ рд╕рд┐рд░ рдкрд░ рдЫреВрдЯ рджреЗрдВ):
StackPrinterTiny class StackPrinterTiny { public: explicit StackPrinterTiny(const char* msg) { mfStartTime = getTime(); } ~StackPrinterTiny() { double fEndTime = getTime(); fprintf(stdout, "%g\n", (fEndTime-mfStartTime)); } void printTime(int line) const { double fEndTime = getTime(); fprintf(stdout, "(%d) %g\n", line, (fEndTime-mfStartTime)); } private: double getTime() const { timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + tv.tv_usec / 1000000.0; } double mfStartTime; }; #ifdef OutToAnalyze typedef StackPrinterTiny usedStackPrinter; #else typedef StackPrinter usedStackPrinter; #endif
рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдкрд░
рдЕрдм, рд╢рд┐рд▓реНрдк рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ "рдмрд╛рдзреНрдпрдХрд╛рд░реА" рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЪрд▓реЛ рд╕рдВрдХрд▓рдХ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдВ:
#include <iostream> #include <functional> #include <stdio.h> #include <string> #include <sys/time.h> #include <sys/timeb.h> #include <climits> typedef unsigned long long TCurrentCalculateType; // Closured: result, fiMax // loop, loooop, loooooooop #define LOOP_LOOP(what) \ for(unsigned long long fi = 0; fi < fiMax; ++fi) \ for(unsigned long long fi2 = 0; fi2 < fiMax; ++fi2) \ for(unsigned long long fi3 = 0; fi3 < fiMax; ++fi3) \ result = what int main() { // mulbyNct<> const TCurrentCalculateType calcMeDigit = 9000000; const unsigned long long fiMax = ULLONG_MAX; #ifndef OutToAnalyze std::cout << "Calculate: " << calcMeDigit << " with fiMax = " << fiMax << std::endl; #endif currentCalculateType result = 0; #ifdef CALCULATE_IN_COMPILE_TIME std::cout << "compile time " << calcMeDigit << " * " << calcMeDigit << " = " << mulbyNct<calcMeDigit, calcMeDigit>::result << std::endl; #endif { usedStackPrinter sp("1"); // on image - mulby7 LOOP_LOOP(mulby7(calcMeDigit)); #ifndef OutToAnalyze std::cout << "by x7 = " << result << std::endl; #else std::cout << "=" << result << std::endl; #endif } { usedStackPrinter sp("2"); // on image - mulbyN LOOP_LOOP(mulbyN(calcMeDigit, calcMeDigit)); #ifndef OutToAnalyze std::cout << "x*x where x is " << calcMeDigit << " = " << result << std::endl; #else std::cout << "=" << result << std::endl; #endif } { usedStackPrinter sp("3"); // on image - mulbyNSTL LOOP_LOOP(mulbyNSTL(calcMeDigit, calcMeDigit)); #ifndef OutToAnalyze std::cout << "STL x*x where x is " << calcMeDigit << " = " << result << std::endl; #else std::cout << "=" << result << std::endl; #endif } return 0; } // Compile with // // clear && g++ main.1.cpp -O3 -std=c++0x -o main.1 // PS -Ofast. - .
рд╕рдлрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИред рдЕрдЧрд░ рдЗрдХрдЯреНрдард╛ (рдФрд░ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) - рдЬрд╛рд░реА рд░рдЦреЗрдВред
рд╣рдордиреЗ рд╕реЛрдЪрд╛, рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрд░ рдердХ рдЧрдП рдереЗ
рд╡реИрд╕реЗ, рдореИрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рднреВрд▓ рдкрд╛рдпрд╛:
рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдореЗрдВ , рдореИрдВ 498 * 498 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЧрдгрдирд╛
рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдЧрд░ рдореИрдВрдиреЗ # рдПрдлрд╝
#if defined(CALCULATE_IN_COMPILE_TIME)
CALULULATE_IN_COMPILE_TIME) рдХреЗ рд╕рд╛рде рдХреИрд▓реНрд╕реАрдорд┐рдбрд┐рдЬрд┐рдЯ = 499 (рдпрд╛ рдЕрдзрд┐рдХ) рд╕реЗрдЯ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА: рдореБрдЭреЗ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред рдЬрдм рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░? рдореБрдЭреЗ рдкрд╢реНрдЪрд╛рддрд╛рдк рд╣реБрдЖ, рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ
рд╕рдордп рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ: рдпрд╣ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐, рд╕рдВрдЦреНрдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд░реНрде рд╣реИ рд╡реЗ рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ: рд▓реЗрдХрд┐рди рдПрдХ рддрд╕реНрд╡реАрд░ рдлреНрд░реЗрдо рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдХрд░реЗрдЧрд╛ред рд╣рдореНрдо, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рднреВрд▓ рдЧрдП рдХрд┐ рдХреИрд╕реЗ рдЦреВрдиреА рдЖрдБрд╕реВ рдХреЗ рд╕рд╛рде рд░реЛрдирд╛ рд╣реИ - рдореИрдВ рдЦрд╝реБрд╢реА рд╕реЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕рдиреЗ LabPlot'e рдореЗрдВ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА (рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ:
main.1.to.out.sh# / рдмрд┐рди / рд╢
./main.1> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
./main.1 >> out.txt
# рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдереА? }: ->
рдореЗрд░реА рдорд╢реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо (Intel┬о Core (TM) i5 CPU @ 2.8 GHz CPU, 8 GiB Memory)
рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕ рдЯрд┐рдк 43 рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ "рдЫреЛрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред" рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рдореЗрдВ, рд╕рд▓рд╛рд╣ рдХреЛ рдорд╛рдирдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рд╕рдВрдЧреНрд░рд╣ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдзрд┐рдХ рдкрдардиреАрдп, рдмрдирд╛рдП рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ, рдФрд░ рдХрднреА-рдХрднреА рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдХреЛрдб рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдХреНрдпрд╛ рдирд░реНрдХ ... рдбреЛрдЧрд░, рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛),
mulbyNSTL
рд╡реИрд░рд┐рдПрдВрдЯ рдХрд╛ рдФрд╕рдд рд╕рдордп рдЗрд╕рдХреЗ рдореВрд▓
mulbyN
рд╕реЗ рдХрдо рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рд╕реАрдзреЗ рд╣рд╛рде рдкрд░ рдкрд╛рдк рдирд╣реАрдВ рдХрд░рддрд╛ ... рд▓реЗрдХрд┐рди рд╡рд╣ рдХреНрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдореИрдВ рджреВрд╕рд░рд╛ рд╣реВрдБ
рдЯрд╛рд╕реНрдХ рдирдВрдмрд░ рджреЛ:
рдПрдХ рдореЗрдВ рджреЛред рдХрд┐рд╕реА рдЬрд╛рдирдХрд╛рд░ рдиреЗ рд▓рд┐рдлреНрдЯ рдореЗрдВ рд▓рдЧреЗ рдмрдЯрди рдХреЛ рд╕реНрд╡реИрдк рдХрд┐рдпрд╛ред рдкрд╣рд▓реА рдордВрдЬрд┐рд▓ рдХреЗ рдмрдЬрд╛рдп рджреВрд╕рд░реА рдордВрдЬрд┐рд▓ рд░рдЦреЛ рдФрд░ рджреВрд╕рд░реА рдХреЗ рдмрдЬрд╛рдп рдкрд╣рд▓реА рдордВрдЬрд┐рд▓ред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдмрдЯрди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред рдореИрдВ рд▓рд┐рдлреНрдЯ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред рд╕рднреА рдЖрдкрд╕реЗ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдПрдХ рд╕реНрд╡рд┐рдЪ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ 1 рдЗрдирдкреБрдЯ 2 рдФрд░ 2 рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдЗрдирдкреБрдЯ 1ред
рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдХреЗрд╡рд▓ 1 рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЖрдпрд╛:
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рджреВрд╕рд░реЗ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдпрд╣ рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ "рдПрдВрдб" рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
int worker2(unsigned int n) { return (n & 1) + 1; }
рдФрд░, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдЙрддреНрддрд░ рдХреЛ рджреЗрдЦрд╛ (рдЬреЛ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░): рд╣рдо 3 рд╕реЗ рдлрд░реНрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдШрдЯрд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:
int worker3(unsigned int n) { return 3 - n; }
рдЕрдм, рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЖрдк рдЦреВрдиреА рдЖрдБрд╕реВ рдирд╣реАрдВ рднреВрд▓ рд╕рдХрддреЗ), рд╣рдо рдЗрди рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ (рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 1, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 2, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 3) рдХреА рдЧрддрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗрдВрдЧреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрд╡рд╛рд╕реНрдереНрдпрдХрд░ рд▓рд╛рд▓рд╕рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрджреЗрд╣ рд╣реИ - рдореИрдВ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рдпрд╣
std::generate
рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╣реИ
std::generate
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
std::generate
:
рдпрд╣ рд╡рд┐рдЪрд╛рд░ C ++ рджреБрдирд┐рдпрд╛ рдЬрд┐рддрдирд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ: рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ (рдордВрдЬрд┐рд▓ рд╕рдВрдЦреНрдпрд╛, рдЕрд░реНрдерд╛рдд [1, 2]) рдФрд░ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ ... рдХреБрд▓:
#include <iostream> #include <functional> #include <stdio.h> #include <string> #include <sys/time.h> #include <sys/timeb.h> #include <climits> #include <vector> #include <algorithm> #include <numeric> #include <random> #include <iterator> int main() { static std::mt19937 _randomNumbersEngine; std::vector<unsigned int> _vectorNumbers(50000000); // ? std::uniform_int<unsigned int> uiRandomNumber(1, 2); std::generate(_vectorNumbers.begin(), _vectorNumbers.end(), binderRandom<std::uniform_int<unsigned int>, std::mt19937>(uiRandomNumber, _randomNumbersEngine)); // - // // { usedStackPrinter sp("1"); std::transform(_vectorNumbers.begin(), _vectorNumbers.end(), _vectorNumbers.begin(), worker1); } { usedStackPrinter sp("2"); std::transform(_vectorNumbers.begin(), _vectorNumbers.end(), _vectorNumbers.begin(), worker2); } { usedStackPrinter sp("3"); std::transform(_vectorNumbers.begin(), _vectorNumbers.end(), _vectorNumbers.begin(), worker3); } return 0; }
рдореЗрд░реА рдорд╢реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо (Intel┬о Core (TM) i5 CPU @ 2.8 GHz CPU, 8 GiB Memory)
рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ: рджреЛрдиреЛрдВ (рд╕рд╛рдорд╛рдиреНрдп) рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдорд╛рдк рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ)ред рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдпрджрд┐ рдЖрдк рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╛рди рдпрд╛ рд╕рдорд╛рди рд╣реЛрдЧрд╛? рдпрд╣ рдПрдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд╛рдардХ рдХреЛ рдЕрдкрдирд╛ рд╣реЛрдорд╡рд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЗрд╕ рдХрдЪрд░реЗ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрд╕рдВрдж рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдордп рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдЧрдпрд╛ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп)ред
рдЕрдкрдбреЗрдЯ:рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛:
inline TCurrentCalculateType mulby7fast(TCurrentCalculateType value) { return (value << 3) - value; }
рдореЗрд░реА рдорд╢реАрди (Intel┬о Core (TM) i5 CPU @ 2.8 GHz CPU, 8 GiB Memory) рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо:
рдореЗрд░реА рдорд╢реАрди (Intel┬о Core (TM) i5 CPU @ 2.8 GHz CPU, 8 GiB Memory) рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо:
рдЕрджреНрдпрддрди # 2Minuses рдФрд░ pluses рдХрд╛ рднрдпрд╛рдирдХ рд╡рд┐рддрд░рдг:
рдирд┐рд╖реНрдХрд░реНрд╖
- рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдЯреЛ рдкреВрд░реНрдг рдХреЗ рд╕рд╛рде рдЖрдИрдбреАрдИ рдХреЗ рдмрд┐рдирд╛ рд▓реЗрдЦрди (рдЬреИрд╕реЗ рдХрд┐ рдкреВрд░реЗ рдЯрдорд╛рдЯрд░ рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЕрд╕рд┐рд╕реНрдЯ рдПрдХреНрд╕) рдЗрддрдирд╛ рдШрд╛рддрдХ рдирд╣реАрдВ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ 200 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдФрд░ рд╕рд░рд▓ рддрд░реНрдХ)ред рд╣рд╛рдВ, рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдЧрд╛рдпрдм рд╣реИрдВ: рдЪрддреБрд░ рд╕рдВрд░реЗрдЦрдг, рдЬреЛрдбрд╝реА рдХреЛрд╖реНрдардХ рдФрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╣реИ ... рдХреБрдЫ рдЬреЛ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ: рдПрдХ рд╕рд╣реА рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрдИрдбреАрдИ рд╢рд╛рдВрдд рд╣реИ!
- рд╕рдВрд╕реНрдХрд░рдг 4.4.5 gcc рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ - рд▓реЗрдХрд┐рди "рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдПрди" рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛
std::transform(_vectorNumbers.begin(), _vectorNumbers.end(), _vectorNumbers.begin(), [](int n) { return n xor 3; } );
рдРрд╕реА рдмрд╛рддреЗрдВред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдФрд░ рд╢реБрднрдХрд╛рдордирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдкреАрдПрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдпрд╛ рдЯрд╛рдЗрдкреЛрд╕, рдХреГрдкрдпрд╛ рдкреАрдПрдо рдореЗрдВ рд▓рд┐рдЦреЗрдВред