AMcoder - javascript, python, java, html, php, sql

Ինձ ծանոթ չէ այս C++ նշումը [կրկնօրինակ]

Ես փորձում եմ հասկանալ իմ դասախոսի գրած ծածկագիրը։ Օրենսգրքում կա մի տող, որն ասում է

a = (b > c) ? c : b;

որտեղ a, b և c պարզապես լողացող փոփոխականներ են: Առաջին անգամ եմ տեսնում այդ արտահայտությունը։ Փորձեցի գուգլել, բայց ոչինչ չստացվեց։ Ողջունելի է ցանկացած բացատրություն կամ հղում սրա համար: Շնորհակալություն.

03.12.2017

Պատասխանները:


1

Դա եռակի արտահայտություն է։ Երրորդական արտահայտություններն ունեն հետևյալ ձևը.

condition ? <result_if_true> : <result_if_false>

Երրորդական արտահայտությունները կարող են թարգմանվել if հայտարարության.

if (condition) {
    <result_if_true>;
} else {
    <result_if_false>;
}

Եռյակ արտահայտությունների առավելությունը համարժեք if հայտարարությունների նկատմամբ փոփոխականի հայտարարումն է: Օրինակ, հետևյալ if հայտարարությունը և եռակի արտահայտությունը համարժեք են, բայց պարզ է, թե որն է ավելի հակիրճ.

int seconds = 4;

// ===== USING IF STATEMENT =====
string secs_string;

if (seconds == 1) {
    secs_string = "second";
} else {
    secs_string = "seconds";
}

cout << "You have " << seconds << " "<< secs_string << " remaining." << endl;
// Output: You have 4 seconds remaining.


// ===== USING TERNARY EXPRESSION =====
string secs_string = (seconds == 1) ? "second" : "seconds";

cout << "You have " << seconds << " "<< secs_string << " remaining." << endl;
// Output: You have 4 seconds remaining.

Նկատի ունեցեք, որ if-ի օգտագործումը պահանջում է տողի առանձին հայտարարում if դրույթից դուրս, մինչդեռ եռակի արտահայտությամբ դա կարելի է անել ներքևում:


Հետագա ընթերցում

03.12.2017
  • Երրորդական արտահայտությունները իրականում չեն կարող թարգմանվել if հայտարարությունների, քանի որ հայտարարությունները չեն կարող տեղադրվել ավելի մեծ արտահայտությունների մեջ: Նկատի ունեցեք, որ եռակի արտահայտությունն այստեղ condition ? <result_if_true> : <result_if_false> է: 03.12.2017
  • @juanchopanza, լավ, միշտ էլ կա մի միջոց՝ եռյակից if հայտարարությանը չշաքարավազացնելու համար: Համաձայն եմ, դա կարող է ուղղակի հարաբերակցություն չլինի, բայց նույնիսկ այնպիսի բարդ բան, ինչպիսին է. x = a ? (b ? c : d) : (e ? f : g)-ը, կարելի է վերափոխել մի քանի ներդիր if պնդումների: Բացի այդ, foo(x ? y : z)-ի պես մի բան կարելի է շաքարազրկել if (x) foo(y); else foo(z);ի 03.12.2017
  • Այստեղ շաքարավազ չկա: Արտահայտություններն ու հայտարարությունները շատ տարբեր բաներ են: Դուք կարող եք փոխարինել արտահայտությունը օգտագործող կոդը համարժեք կոդով՝ օգտագործելով if հայտարարությունները, բայց դա չի նշանակում, որ արտահայտությունը համընդհանուր փոխարինելի է հայտարարությամբ: 03.12.2017
  • Նույնիսկ հանձնարարությունը C++-ի արտահայտություն է (երաշխավորված է ներկառուցվածների համար, հնարավոր է բաժանել օգտագործողի կողմից սահմանված տեսակների), այնպես որ կարող եք օգտագործել variable = whatever որպես ենթարտահայտություն: Դուք չեք կարող դա անել եթե-ներով: 03.12.2017
  • @juanchopanza, կա՞ կոնկրետ օրինակ, որտեղ եռյակ արտահայտությունը չի կարող փոխարկվել if հայտարարության: Ես երբեք անձամբ չեմ հանդիպել մեկի (գուցե ես պարզապես բավական երկար ժամանակ չեմ կոդավորել): Ես հասկանում եմ, որ դրանք տարբեր են կոնցեպտուալ առումով, բայց, իմ գիտելիքներով, դրանք հիմնականում հավաքվում են նույն ժողովին: (Նաև, ես գտնում եմ, որ if թարգմանությունը արդյունավետ միջոց է եռյակ արտահայտությունները բացատրելու մարդկանց, ովքեր ծանոթ չեն շարահյուսությանը: Դա, մասամբ, որոշեցի այն ներառել իմ պատասխանի մեջ:) 03.12.2017
  • Դուք արդեն ունեք ձեր պատասխանի օրինակ՝ փոփոխականի հռչակագիրը։ Բայց նույնիսկ վերը նշված հանձնարարական արտահայտության մեջ դուք չեք կարող փոխարինել եռյակ արտահայտությունը if-ներով՝ variable = if ...: Կամ, օրինակ, bar(foo(x ? y : z)): Զանգը fooին չի փոխարինվում հայտարարությամբ: 03.12.2017
  • @juanchopanza, ես տեսնում եմ, թե որտեղից ես գալիս: if հայտարարությունը երբեք չի փոխարինում եռակի արտահայտությանը: Իմ կարծիքն այն է, որ յուրաքանչյուր եռակի արտահայտության համար միշտ կա արդյունքի համարժեք if հայտարարություն (կամ դրանց համակցություն): 03.12.2017

  • 2

    Սա կոչվում է պայմանական օպերատոր, որը նաև կոչվում է եռակի օպերատոր: Դա պարզապես սեղմված ձեւով եթե-հայտարարություն է:

    a = (b > c) ? c : b;
    

    ունի նույն ազդեցությունը, ինչ

    if (b > c) a = c; else a = b;
    
    03.12.2017
  • Հարկ է նշել, որ երբեմն օգտակար է օգտագործել եռակի օպերատորը, եթե փորձում եք ուղղորդել կոմպիլյատորին օգտագործել պայմանական քայլ: Բայց, ինչպես օպտիմալացման բոլոր խորհուրդներն ու հնարքները, սա երաշխավորված չէ և կարող է այլևս նույնիսկ ճիշտ չլինել: 03.12.2017
  • @Tyler Ես ծանոթ չեմ այդ օրինաչափությանը։ Երևի որպես պատասխան պետք է հրապարակել։ 03.12.2017
  • Խիստ ասած՝ նույնը չեն 03.12.2017
  • @Silvio. Իրականում օրինաչափություն չէ, ընդամենը երկու տարբեր եղանակներով, որ կոմպիլյատորը կարող է թարգմանել if-ը x86-ում. կամ հստակ ճյուղավորմամբ, որը պայմանականորեն փոխում է հրահանգի ցուցիչը տարբեր բլոկների՝ պայմանները կարգավորելու համար, կամ որպես պայմանական քայլ (cmov), որը չի նշանակում: փոխեք IP-ն և փոխարենը կապում պայմանականը մեկ հրահանգի մեջ: Ցածր հետաձգման իրավիճակներում, և հատկապես այն իրավիճակներում, որոնցում ցանկալի է միատեսակ հետաձգում, նախընտրելի է cmovը: 03.12.2017
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..