Kako učiniti switch naredbu u C++ učinkovitijom?

May 21, 2026

Ostavite poruku

Michael Brown
Michael Brown
Michael je veteran prodaje u Ningbo Liming Relay Company Limited. Otkako je tvrtka ušla na prekomorska tržišta 2004. godine, on je odgovoran za inozemnu prodaju i uspostavio je široku mrežu kupaca diljem svijeta.

Bok tamo! Ja sam trgovac prekidačima, nudim široku lepezu visokokvalitetnih opcija poputAutomobilski opći prekidač napajanja,Minijaturni Roker prekidač, iBoat Rocker Switch. Danas želim razgovarati o tome kako naredbu switch u C++ učiniti učinkovitijom.

Sada, ako se bavite programiranjem, znate da su izjave switch prilično praktične. Koriste se za odabir jednog od mnogih blokova koda koji će se izvršiti, nešto poput višesmjerne ceste gdje birate pravi put na temelju određenog uvjeta. Ali evo o čemu je riječ: ponekad mogu biti malo sporiji, posebno kada postoji veliki broj slučajeva. Dakle, istražimo neke načine kako ih ubrzati.

1. Smanjite broj usporedbi

Osnovna ideja iza naredbe switch je usporedba vrijednosti s hrpom konstanti. Kada imate dugačak popis slučajeva, kompajler mora napraviti gomilu usporedbi. Jedno jednostavno rješenje je grupiranje sličnih slučajeva.

#include <iostream> int main() { int dan = 3; switch (dan) { case 1: case 2: case 3: std::cout << "Radni je dan" << std::endl; prekinuti; case 6: case 7: std::cout << "Vikend je" << std::endl; prekinuti; zadano: std::cout << "Neispravan dan" << std::endl; } vrati 0; }

U ovom primjeru, umjesto da imamo zasebne izlazne izjave za svaki radni dan i dan vikenda, grupiramo ih zajedno. Na ovaj način smanjuje se broj različitih slučajeva, a prevodilac ne mora izvoditi toliko usporedbi.

2. Koristite preglednu tablicu

Za switch naredbe s velikim brojem uzastopnih slučajeva, pregledna tablica može promijeniti igru. Pregledna tablica je polje gdje indeks odgovara vrijednosti u naredbi switch, a element polja sadrži rezultat ili radnju koju treba poduzeti.

#include <iostream> const int numCases = 10; void akcija1() { std::cout << "Akcija 1" << std::endl; } void akcija2() { std::cout << "Akcija 2" << std::endl; } //... druge radnje funkcije void (*actionTable[numCases])() = {action1, action2, /*... ostale akcije */}; int main() { int input = 2; if (input >= 0 && input < numCases) { actionTable[input](); } else { std::cout << "Neispravan unos" << std::endl; } vrati 0; }

Ovdje, umjesto naredbe switch, imamo niz pokazivača na funkcije. Jednostavno pristupamo nizu pomoću ulazne vrijednosti i pozivamo odgovarajuću funkciju. Ovo je puno brže jer je pristup elementu niza operacija u stalnom vremenu, dok naredba switch može zahtijevati višestruke usporedbe.

3. Naručite svoje kofere strateški

Redoslijed slučajeva u naredbi switch je važan. Ako znate da je vjerojatnije da će se pojaviti određeni slučajevi nego drugi, stavite ih na početak naredbe switch.

#include <iostream> int main() { int userChoice; // Pretpostavimo da većina korisnika izabere opciju 1 std::cout << "Unesite svoj izbor (1, 2, 3): "; std::cin >> korisnički izbor; switch (userChoice) { case 1: std::cout << "Odabrali ste najpopularniju opciju" << std::endl; prekinuti; case 2: std::cout << "Odabrali ste opciju 2" << std::endl; prekinuti; case 3: std::cout << "Odabrali ste opciju 3" << std::endl; prekinuti; zadano: std::cout << "Neispravan izbor" << std::endl; } vrati 0; }

Postavljanjem najvjerojatnijeg slučaja na prvo mjesto, prevodilac će do njega doći brže, smanjujući ukupno vrijeme izvršenja.

4. Razmislite o korištenju enuma

Ako koristite cjelobrojne vrijednosti u svom switch iskazu, razmislite o korištenjunabrajanjeumjesto toga. Annabrajanje(enumeration) je korisnički definiran tip podataka koji se sastoji od skupa imenovanih konstanti.

#include <iostream> enum Boja { RED, GREEN, BLUE }; int main() { Boja mojaBoja = ZELENA; switch (myColor) { case RED: std::cout << "Boja je crvena" << std::endl; prekinuti; case GREEN: std::cout << "Boja je zelena" << std::endl; prekinuti; case BLUE: std::cout << "Boja je plava" << std::endl; prekinuti; zadano: std::cout << "Nevažeća boja" << std::endl; } vrati 0; }

Korištenjenabrajanječini vaš kod čitljivijim i lakšim za održavanje. Prevodilac također može bolje optimizirati naredbu switch jer zna da su moguće vrijednosti ograničene nanabrajanječlanova.

5. Profilirajte i optimizirajte

Na kraju, ne zaboravite profilirati svoj kod. Alati za profiliranje mogu vam pomoći identificirati koji dijelovi vaše izjave o prebacivanju oduzimaju najviše vremena. Nakon što saznate gdje su uska grla, možete primijeniti odgovarajuće tehnike optimizacije.

Postoje različiti alati za profiliranje dostupni za C++, kao što je gprof u Linux okruženju. Pokretanjem vašeg programa s profilerom, možete vidjeti koliko se puta svaki slučaj u naredbi switch izvršava i koliko je vremena potrebno.

Sve u svemu, učiniti naredbu switch u C++ učinkovitijom znači biti pametan s kodom. Bilo da se radi o smanjenju usporedbi, korištenju tablica za pretraživanje, mudrom redoslijedu slučajeva ili korištenju enuma, svaka tehnika može doprinijeti značajnim poboljšanjima brzine.

Automotive General Power Switch bestMiniature Roker Switch best

Ako ste na tržištu visokokvalitetnih prekidača za vaše automobile, brodove ili druge projekte, nemojte se ustručavati posegnuti za pregovorima o kupnji. Ovdje sam da vam ponudim vrhunske sklopke po konkurentnim cijenama.

Reference:

  • "Programski jezik C++" Bjarnea Stroustrupa
  • Online C++ dokumentacija i vodiči
Pošaljite upit