LINQ C ++ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП

рдпрд╣ рд╕рдм рддрдм рд╢реБрд░реВ рд╣реБрдЖ рдЬрдм рдореИрдВ рд╕рдВрд╕реНрдерд╛рди рдореЗрдВ рдерд╛ рдФрд░ рд╕реНрдирд╛рддрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ C ++ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрд╛ рдФрд░ рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рджрд┐рди рдореБрдЭреЗ C # рдореЗрдВ .NET рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рдереЛрдбрд╝рд╛ рдереВрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреБрдЫ рднреА рдирд╣реАрдВ - рд╡рд╣ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдпрд╛ред рдореИрдВрдиреЗ рд╕реА ++ рд╕реЗ рд▓рд╛рднрдХрд╛рд░реА рдЕрдВрддрд░ рджреЗрдЦрд╛: рд╕реБрд░рдХреНрд╖рд╛, рдХрдареЛрд░рддрд╛, рдЖрджрд┐ред рдореИрдВ рднреА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп LINQ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...



рдореБрджреНрджреЗ рдХрд╛ рдкрд░рд┐рдЪрдп


рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрдпреВ рдХреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрдм рдпрд╣ рд╕реА ++ рдкрд░ рд▓реМрдЯрдиреЗ рдХрд╛ рд╕рдордп рдерд╛ред рдЫрд╣ рдорд╣реАрдиреЗ рдХреЗ рдмреНрд░реЗрдХ рдХреЗ рдмрд╛рдж рд╕реА ++ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдереЛрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдерд╛ред рдмреАрдорд╛рд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ, рдЬрдм рдЕрдЪрд╛рдирдХ рдореБрдЭреЗ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рдкрдбрд╝реА, рддреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдпреЛрдЧред C # рдореЗрдВ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

int sum = candles.Sum(c => c.ClosePrice); 

рд▓реЗрдХрд┐рди C ++ рдореЗрдВ рдпрд╣ рд╕рд╛рдордиреЗ рдЖрдпрд╛:

 int sum = 0; for(int i = 0; i < candles.size(); i++) sum += candles[i].ClosePrice; 

рдФрд░ рдпрджрд┐ рдЖрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 int sum = 0; for(auto it = candles.begin(); it != candles.end(); ++it) sum += it->ClosePrice; 

Qt рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ:

 int sum = 0; foreach(Candle candle, candles) sum += candle.ClosePrice; 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдпрд╛ C ++ 11 рднрд╛рд╖рд╛ рдорд╛рдирдХ рд╣рдореЗрдВ рд╕рд░рд▓реАрдХрд░рдг рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ,
рд▓реЗрдХрд┐рди рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдЕрд▓рд╛рд╕ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдХреИрд╕реЗ ... (рдзрдиреНрдпрд╡рд╛рдж рдбрдорд╛рд╕реНрдХрд╕ ):

 int sum = 0; for (Candle candle : vector) sum += candle.ClosePrice; 

рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЕрдЪреНрдЫреЗ рдХреА рдЖрджрдд рдбрд╛рд▓ рд▓реЗрдВред рдпрд╣ рдкреВрд░реА рдЧрдбрд╝рдмрдбрд╝ рдереАред рдпреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдПред рд╣рдореЗрдВ рдПрдХ-рд▓рд╛рдЗрди рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдлрд┐рд░ рдореИрдВрдиреЗ рдЧреВрдЧрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдкрд░ рдкрд╛рдпрд╛: http://stackoverflow.com/questions/3221812/sum-of-elements-in-a-stdvector

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛:

 int sum = std::accumulate(vector.begin(), vector.end(), 0); 

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЪрд╛рд▓рд╛рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЬрдм рд╡рд┐рдзрд┐рд╡рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЦреЗрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдХреЛрдбрд┐рдВрдЧ рдХреА рддрд░рд╣ рдЦреБрд╢рдмреВ рдЖ рд░рд╣реА рд╣реИред

рдХреНрдпрд╛ рдХрд░реЗрдВ?


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

рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдереЗ:


рдпрд╣ рдХреИрд╕реЗ рдмреВрд▓рд┐рдВрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдпрд╛ (рдирд╛рдо рдмреВрд▓ рдФрд░ рд▓рд┐рдирдХ рд╢рдмреНрдж рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ)ред рдЗрд╕реЗ Google рдХреЛрдб рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ: http://code.google.com/p/boolinq/ рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛:

 int sum = boolinq::from(cnadles).sum([](Candle c){return c.ClosePrice;}); 

рдмреЗрд╢рдХ, рдпрд╣ LINQ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди, рдпрд╣ рдХреЗрд╡рд▓ C ++ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдХреЛрдб рдХреА рдмрд╣реБрдд рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рди рд░рд╣рддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ:

рдЕрдиреБрдХреНрд░рдо рд░реВрдкрд╛рдВрддрд░рдг:

рдЕрдиреБрдХреНрд░рдо рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕:

рдирд┐рд░реНрдпрд╛рдд рдЕрдиреБрдХреНрд░рдо:

рдФрд░ рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рднреА:


рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ:

 int src[] = {1,2,3,4,5,6,7,8}; auto dst = from(src).where( [](int a){return a%2 == 1;}) // 1,3,5,7 .select([](int a){return a*2;}) // 2,6,10,14 .where( [](int a){return a>2 && a<12;}) // 6,10 .toVector(); 

рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрджрдо рд╕реЗ рдХрджрдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
1. рдХреЗрд╡рд▓ рд╡рд┐рд╖рдо рдорд╛рди рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред
2. рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рдорд╛рди 2 рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВред
3. рд░реЗрдВрдЬ (2,12) рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рди рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдо рдЫреЛрдбрд╝реЗрдВред
4. рдкрд░рд┐рдгрд╛рдо рдХреЛ std::vector рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐:

 struct Man { std::string name; int age; }; Man src[] = { {"Kevin",14}, {"Anton",18}, {"Agata",17}, {"Terra",20}, {"Layer",15}, }; auto dst = from(src).where( [](const Man & man){return man.age < 18;}) .orderBy([](const Man & man){return man.age;}) .select( [](const Man & man){return man.name;}) .toVector(); 

dst рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░ std::vector<std::string> ред рдкрд░рд┐рдгрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореВрд▓реНрдп рд╣реЛрдВрдЧреЗ: "рдХреЗрд╡рд┐рди", "рдкрд░рдд", "рдЕрдЧрддрд╛"ред рд╕реНрд░реЛрдд рд╕рд░рдгреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп:

1. рдХреЗрд╡рд▓ 18 рд╡рд░реНрд╖ рд╕реЗ рдХрдо рдЖрдпреБ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред
2. рдмрдврд╝рддреА рдЙрдореНрд░ рдореЗрдВ рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред
3. рд╕рд░рдгреА рд╕реЗ рдХреЗрд╡рд▓ рдирд╛рдо рдЪреБрдиреЗрдВред
4. рдкрд░рд┐рдгрд╛рдо рдХреЛ std::vector рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдкрд░рд┐рдгрд╛рдо arrays, рд╡реИрдХреНрдЯрд░ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдлрдВрдХреНрд╢рдВрд╕ рдХреА рдЧрддрд┐ рд▓реВрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╕рдорд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЧрддрд┐ рд╕реЗ рдиреАрдЪ рдирд╣реАрдВ рд╣реИред рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ LINQ рдХреЗ рдЬрд┐рддрдирд╛ рдХрд░реАрдм рд╣реЛ рд╕рдХреЗред рдореБрдЭреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рддрдиреЗ рдкреНрд░рддрд┐рд╢рдд рд╣реИрдВ, рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА)ред рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ LINQ рдореЗрдВ рдХреЛрдИ рдПрдирд╛рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХ рд╣реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗред рдпрджрд┐ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рд╣реИрдВ, рддреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдирд╛ - рдХреГрдкрдпрд╛ рдмреЛрд▓реЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдШреВрдордиреЗ-рдлрд┐рд░рдиреЗ рдХрд╛ рд╕рдордп рдФрд░ рдЗрдЪреНрдЫрд╛ рд╣реИ - рдЬреБрдбрд╝реЗрдВред рд╣рд░ рдХреЛрдИ Google рдХреЛрдб рдкрд░ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред Google рд╕рдореВрд╣реЛрдВ рдкрд░ рдПрдХ рдЪрд░реНрдЪрд╛ рд╕рдореВрд╣ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://groups.google.com/forum/?fromgroups#-forum/boolgq!

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


All Articles