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

Importantly, that investor viewpoint is not new. It cycles in when conditions are right (and vice versa). It also brings the ineffective warnings of an overpriced market with it.Looking toward a good 2022 stock market, there is no apparent reason to expect these issues to change.

Among the actives, Ascendas REIT sank 0.64 percent, while CapitaLand Integrated Commercial Trust plummeted 1.42 percent, City Developments plunged 1.12 percent, Dairy Farm International tumbled 0.86 percent, DBS Group skidded 0.68 percent, Genting Singapore retreated 0.67 percent, Hongkong Land climbed 1.30 percent, Mapletree Commercial Trust lost 0.47 percent, Mapletree Logistics Trust tanked 0.95 percent, Oversea-Chinese Banking Corporation dropped 0.61 percent, SATS rose 0.24 percent, SembCorp Industries shed 0.54 percent, Singapore Airlines surrendered 0.79 percent, Singapore Exchange slid 0.30 percent, Singapore Press Holdings declined 1.03 percent, Singapore Technologies Engineering dipped 0.26 percent, SingTel advanced 0.81 percent, United Overseas Bank fell 0.39 percent, Wilmar International eased 0.24 percent, Yangzijiang Shipbuilding jumped 1.42 percent and Keppel Corp, Thai Beverage, CapitaLand and Comfort DelGro were unchanged.

telegram from ru


Telegram C++ geek
FROM USA