C++ таңдалған шарттар мен циклдар үшін операторлардың стандартты жиынын қамтамасыз етеді.
Код тармақтарының шартының конструкцияларына қатысты түйінді сөздер:
- егер
- басқа
- ауыстырып қосқыш
- іс
- үзіліс
- әдепкі
Цикл конструкцияларына қатысты кілт сөздер:
- істеу
- әзірше
-
үзіліс
*жалғастыру - үшін
Шарт мәлімдемелері
if мәлімдемесі
if операторын қолданатын шарт конструкциясы келесідей құрылады:
int x = 56; bool check_x() { if (x > 0) return true; return false; }
Бұл жағдайда шарт жақшаға if операторынан кейін қойылады. Бұл конструкцияда return true; коды, егер x 0-ден үлкен болса, орындалады. Келесі жол қайтару жалған; енді шарт орындалғанда орындалатын кодқа сілтеме жасамайды. Шарт конструкцияларында бұл шарт орындалғанда, егер код бұйра жақшаға жиектелмесе, яғни шарт бойынша орындалатын кодтың денесі құрылмаса, тек бір ғана код жолы орындалады. Екі код опциясын қарастырыңыз:
Бірінші нұсқа:
int x = 56; bool check_x() { if (x > 0) x = 0; return true; return false; }
Бұл кодта return true; әрқашан орындалады, өйткені тек x = 0; жолы шарт бойынша орындалатын кодқа жатады.
Екінші нұсқа:
int x = 56; bool check_x() { if (x > 0) { x = 0; return true; } return false; }
Бұл кодта true true; тек x > 0 шарты ақиқат болса ғана орындалады.
басқа оператор
else операторы if операторымен бірге шарттар тізбегін құру үшін қолданылады.
int x = 56; bool check_x() { if (x > 0) { x = 0; return true; } else if (x < 0) { x = 0; return false; } else { return false; } }
else операторы алдыңғы шарт орындалмаған жағдайда жаңа шартты қосу үшін де – else if. конструкциясын немесе алдыңғы шарттар орындалмаған жағдайда шарттар тізбегіндегі соңғы код ретінде де пайдаланылуы мүмкін. Сондай-ақ, егер код бір жолға сәйкес келсе, код денесі үшін бұйра жақшаларды қолданбауға болады.
Мәлімдемелердің ауысуы, регистр, үзіліс, әдепкі
Шарты бүтін таңдауды пайдаланатын код тармағын таңдау үшін қосу регистрі конструкциясы қолданылады. Бұл қосу регистрін қарапайым бүтін мәндер, санаулар және таңба коды бойынша таңдау үшін пайдалануға болатынын білдіреді.
int x = 100; bool check_x() { switch (x) { case 0: return true; case 50: x = 0: break; case 100: return false; default: return false; }
Жоғарыда келтірілген кодта x айнымалысының 0, 50, 100 сандарына теңдігі тексеріледі. default операторы шарттардың ешқайсысы сәйкес келмесе, орындалатын кодты таңдайды. Сондай-ақ, жағдай 50: бар код блогында break операторы қосылғанына назар аударыңыз, бұл мәлімдеме шарттан шығады, ал return операторы функциядан шығады. Егер үзіліс операторын қоспасаңыз, онда кодтың орындалуы жағдай 100: блок: . ауыстырып-қосу жағдайы конструкциясының бұл мүмкіндігінің арқасында сізге қажет шарттарды біріктіруге болады. бірдей кодты орындау үшін. Мысалы:
int x = 100; bool check_x() { switch (x) { case 0: case 50: case 100: return true; default: return false; } }
Осылайша, 0, 50, 100-ге тең x үшін функция ақиқат мәнін қайтарады, ал қалған барлық мәндер үшін функция жалған мәнін қайтарады.
Сондай-ақ, осы конструкциядағы жағдайды таңдау кодын код блоктарына орауға болады, бұл ауқымды шектеуге және бірдей атаулары бар айнымалы мәлімдемелерді пайдалануға мүмкіндік береді.
int x = 100; int check_x() { switch (x) { case 0: { int y = 1; return y; } case 50: { int y = 2; return y; } case 100: { int y = 3; return y; } default: return x; } }
Осылайша, қолдану аясын шектеу арқылы біз жағдай жағдайында бірдей атпен айнымалыларды пайдалану мүмкіндігін аламыз. Бірақ бұйра жақшалармен шектелген аумақтан тыс, бұл жағдайда y айнымалысы болмайтынын ұмытпаңыз.
Цикл мәлімдемелері
while операторы
while операторы шарт орындалғанша кодты өз денесінде қайталайды. Мысалы:
int i = 0; while (i < 10) { i = i + 1; }
Бұл кодта цикл орындалғаннан кейін i 10-ға тең болады.
мәлімдеме жасаңыз
do операторы while операторымен бірге пайдаланылады және циклдің шарты тексерілгенге дейін цикл денесін кем дегенде бір рет орындауға мүмкіндік береді. Мысалы:
int i = 15; do { i = i - 5; std::cout << i << std::endl; } while (i > 0 && i < 13);
Бұл кодта I айнымалысы бастапқыда шартқа сәйкес келмейді және әдеттегі while циклінде цикл денесінің коды орындалмады, бірақ мұнда do-while циклі қолданылғандықтан, тексеру цикл денесі болғаннан кейін жүргізіледі. орындалды. Нәтижесінде std::cout шығысы келесідей болады:
10 5 0
Неліктен шығыста 0 бар, сіз сұрай аласыз ба? Өйткені, ол шартқа сай келмейді. Тағы да, өйткені тексеру цикл денесінде кодты орындағаннан кейін орындалады. Яғни, циклдің денесі орындалды, содан кейін тексеру орындалды, нәтижесінде цикл өз жұмысын аяқтайды.
үзіліс мәлімдемесі
Коммутатор регистрінің конструкциясы сияқты, бұл мәлімдеме циклдерде қолданылуы мүмкін. Бұл цикл шарты орындалмай тұрып циклден шығу үшін қажет. Мысалы:
int i = 15; while (i < 50) { if (i < 0) { break; } i = i - 5; }
Бұл жасанды мысалда i айнымалысының өсудің орнына азаюына байланысты мәңгілік цикл пайда болады және цикл шартына сәйкес шығу тек i 50-ден үлкен болса ғана орындалады. Бірақ break операторының арқасында және i айнымалысының теріс мәніне арналған сынақ бағдарламасының орындалуы i 0-ден аз болған кезде бұл циклден шығады.
мәлімдемені жалғастыру
Бұл мәлімдеме циклдің итерациясын үзуге және циклдің негізгі бөлігіндегі барлық кодты орындамас бұрын циклдің жаңа итерациясын бастауға мүмкіндік береді. Мысалы:
int i = 0; while (i < 5) { if (i == 3) { i = i + 1; continue; } std::cout << i << std::endl; i = i + 1; }
Бұл кодты орындаған кезде біз келесі нәтижені аламыз:
0 1 2 4
Яғни, 3 санының шығуы өткізіп жібереді.
for мәлімдемесі
for операторы бар циклдер айнымалылардың инициализациясын, шартын және осы айнымалылардың өзгеруін біріктіруге мүмкіндік береді.
Яғни, келесі while циклі
int i = 0; while (i < 10) {
Келесі for цикліне баламалы болады:
for (int i = 0; i < 10; i++) { // ToDo Something }
Бұл циклдің артықшылығы I айнымалысы for циклінің жергілікті ауқымында болады.
for циклдерін бір түрдегі бірнеше айнымалылармен инициализациялауға болады. Мысалы:
for (int i = 0, *p = &i; i < 9; i += 2) { std::cout << i << ':' << *p << ' '; }
Сондай-ақ, шарт айнымалының мәлімдемесі, инициализациясы болуы мүмкін. Мысалы:
char cstr[] = "Hello"; for (int n = 0; char c = cstr[n]; ++n) { std::cout << c; }
C++11 стандартын ескере отырып, auto операторын айнымалы тип ретінде пайдалануға болады, ол инициализатордан айнымалының түрін шығаруға мүмкіндік береді:
std::vector<int> v = {3, 1, 4, 1, 5, 9}; for (auto iter = v.begin(); iter != v.end(); ++iter) { std::cout << *iter << ' '; }
Сондай-ақ қызықты сәт - инициализатор, шарт және өзгерту блогы өрнек болуы мүмкін:
int n = 0; for (std::cout << "Loop start\n"; std::cout << "Loop test\n"; std::cout << "Iteration " << ++n << '\n') { if(n > 1) break; }
C++ 11 стандартынан бастап, for циклдері итерацияны қолдайтын контейнерлерді қайталау мүмкіндігіне ие. Мысалы, стандартты кітапханадағы векторлық контейнер:
std::vector<int> v = {0, 1, 2, 3, 4, 5}; for (const int& i : v) std::cout << i << ' ';
Бұл кодта цикл құрылымы келесідей:
for (извлекаемый из контейнера при каждой итерации объект : контейнер) { // Тело цикла }
Ауқымға негізделген циклдер автоматты мәлімдемені де қолдайды. Мысалы:
std::vector<int> v = {0, 1, 2, 3, 4, 5}; for (auto& i : v) std::cout << i << ' ';