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: |

Launched in 2013, Telegram allows users to broadcast messages to a following via β€œchannels”, or create public and private groups that are simple for others to access. Users can also send and receive large data files, including text and zip files, directly via the app.The platform said it has more than 500m active users, and topped 1bn downloads in August, according to data from SensorTower.

Can I mute a Telegram group?

In recent times, Telegram has gained a lot of popularity because of the controversy over WhatsApp’s new privacy policy. In January 2021, Telegram was the most downloaded app worldwide and crossed 500 million monthly active users. And with so many active users on the app, people might get messages in bulk from a group or a channel that can be a little irritating. So to get rid of the same, you can mute groups, chats, and channels on Telegram just like WhatsApp. You can mute notifications for one hour, eight hours, or two days, or you can disable notifications forever.

telegram from jp


Telegram C++ geek
FROM USA