Telegram Group & Telegram Channel
πŸš€ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² C++: малСнькиС хитрости для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… скоростСй

БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² C++. Π”Π°ΠΆΠ΅ Ссли ваш ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстро. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ нСсколько Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΆΠ°Ρ‚ΡŒ максимум ΠΈΠ· Ρ†ΠΈΠΊΠ»ΠΎΠ².



πŸ”₯ 1. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… вычислСний Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°
❌ ΠŸΠ»ΠΎΡ…ΠΎ:

for (int i = 0; i < vec.size(); i++) {
process(vec[i]);
}

βœ… Π₯ΠΎΡ€ΠΎΡˆΠΎ:

size_t size = vec.size();
for (size_t i = 0; i < size; i++) {
process(vec[i]);
}

ΠŸΠΎΡ‡Π΅ΠΌΡƒ? vec.size() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, особСнно Ссли это Π½Π΅ std::vector, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.



⚑ 2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ reserve() для Π²Π΅ΠΊΡ‚ΠΎΡ€Π°
Если Π²Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π΅Ρ‚Π΅, сколько элСмСнтов Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π² std::vector, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ reserve(). Π­Ρ‚ΠΎ сократит количСство Ρ€Π΅Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ памяти.


std::vector<int> vec;
vec.reserve(1000); // Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌ мСсто для 1000 элСмСнтов
for (int i = 0; i < 1000; i++) {
vec.push_back(i);
}




🏎️ 3. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ range-based for
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Ρ†ΠΈΠΊΠ» for:

for (size_t i = 0; i < vec.size(); i++) {
process(vec[i]);
}

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ range-based for:

for (const auto& elem : vec) {
process(elem);
}

ΠŸΠ»ΡŽΡΡ‹:
βœ… Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ
βœ… Π˜Π·Π±Π΅Π³Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… индСксаций
βœ… ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ компилятору ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄



πŸ”„ 4. std::transform вмСсто for
Если Π²Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ std::transform:


std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());

std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * 2; });

Π—Π°Ρ‡Π΅ΠΌ?
βœ”οΈ Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС Π·Π° счёт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ
βœ”οΈ Код становится ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅


🎯 Π’Ρ‹Π²ΠΎΠ΄
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ†ΠΈΠΊΠ»ΠΎΠ² β€” это Π½Π΅ магия, Π° Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ использованиС возмоТностСй C++. Π£Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ лишниС вычислСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ reserve(), примСняйтС range-based for ΠΈ std::transform, ΠΈ ваш ΠΊΠΎΠ΄ станСт быстрСС ΠΈ элСгантнСС.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ std::transform Π² своём ΠΊΠΎΠ΄Π΅? Π”Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях! πŸ‘‡

➑️ @cpp_geek



tg-me.com/cpp_geek/286
Create:
Last Update:

πŸš€ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² C++: малСнькиС хитрости для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… скоростСй

БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² C++. Π”Π°ΠΆΠ΅ Ссли ваш ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстро. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ нСсколько Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΆΠ°Ρ‚ΡŒ максимум ΠΈΠ· Ρ†ΠΈΠΊΠ»ΠΎΠ².



πŸ”₯ 1. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… вычислСний Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°
❌ ΠŸΠ»ΠΎΡ…ΠΎ:


for (int i = 0; i < vec.size(); i++) {
process(vec[i]);
}

βœ… Π₯ΠΎΡ€ΠΎΡˆΠΎ:

size_t size = vec.size();
for (size_t i = 0; i < size; i++) {
process(vec[i]);
}

ΠŸΠΎΡ‡Π΅ΠΌΡƒ? vec.size() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, особСнно Ссли это Π½Π΅ std::vector, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.



⚑ 2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ reserve() для Π²Π΅ΠΊΡ‚ΠΎΡ€Π°
Если Π²Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π΅Ρ‚Π΅, сколько элСмСнтов Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π² std::vector, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ reserve(). Π­Ρ‚ΠΎ сократит количСство Ρ€Π΅Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ памяти.


std::vector<int> vec;
vec.reserve(1000); // Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌ мСсто для 1000 элСмСнтов
for (int i = 0; i < 1000; i++) {
vec.push_back(i);
}




🏎️ 3. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ range-based for
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Ρ†ΠΈΠΊΠ» for:

for (size_t i = 0; i < vec.size(); i++) {
process(vec[i]);
}

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ range-based for:

for (const auto& elem : vec) {
process(elem);
}

ΠŸΠ»ΡŽΡΡ‹:
βœ… Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ
βœ… Π˜Π·Π±Π΅Π³Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… индСксаций
βœ… ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ компилятору ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄



πŸ”„ 4. std::transform вмСсто for
Если Π²Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ std::transform:


std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dst(src.size());

std::transform(src.begin(), src.end(), dst.begin(), [](int x) { return x * 2; });

Π—Π°Ρ‡Π΅ΠΌ?
βœ”οΈ Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС Π·Π° счёт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ
βœ”οΈ Код становится ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅


🎯 Π’Ρ‹Π²ΠΎΠ΄
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ†ΠΈΠΊΠ»ΠΎΠ² β€” это Π½Π΅ магия, Π° Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ использованиС возмоТностСй C++. Π£Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ лишниС вычислСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ reserve(), примСняйтС range-based for ΠΈ std::transform, ΠΈ ваш ΠΊΠΎΠ΄ станСт быстрСС ΠΈ элСгантнСС.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ std::transform Π² своём ΠΊΠΎΠ΄Π΅? Π”Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях! πŸ‘‡

➑️ @cpp_geek

BY C++ geek


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_geek/286

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

Telegram announces Anonymous Admins

The cloud-based messaging platform is also adding Anonymous Group Admins feature. As per Telegram, this feature is being introduced for safer protests. As per the Telegram blog post, users can β€œToggle Remain Anonymous in Admin rights to enable Batman mode. The anonymized admin will be hidden in the list of group members, and their messages in the chat will be signed with the group name, similar to channel posts.”

How Does Telegram Make Money?

Telegram is a free app and runs on donations. According to a blog on the telegram: We believe in fast and secure messaging that is also 100% free. Pavel Durov, who shares our vision, supplied Telegram with a generous donation, so we have quite enough money for the time being. If Telegram runs out, we will introduce non-essential paid options to support the infrastructure and finance developer salaries. But making profits will never be an end-goal for Telegram.

telegram from ye


Telegram C++ geek
FROM USA