C Vs C ++ Vs C ++ 14 (Ish vaqtini taqqoslash)

Dasturlash paytida ba'zida siz ushbu savolni C va C ++ yoki C ++ 14-da tanlashni xohlagan holatda qolishingiz mumkin, shunda hal qiluvchi omil ish vaqti va dasturning o'zgarishiga moslashish qobiliyatiga to'g'ri keladi. Kelajak . Bu erda C ++, C ++ 14 standart dasturlash ma'lumotlari tuzilmalari va ro'yxatlar, steklar kabi funktsiyalarni ta'minlash uchun C ++ shablonlari sinflarining to'plamidir. , massivlar va hk. Bu konteyner sinflari, algoritmlar va iteratorlarning kutubxonasi bo'lib, dasturni bosish paytida har xil ma'lumotlar tuzilmalarini taqdim etish orqali ko'p vaqtni tejaydi.

C va C ++ o'rtasidagi asosiy farq shundan iboratki, C protsessual dasturlash tilidir va sinflar va ob'ektlarni qo'llab-quvvatlamaydi, C ++ esa protsessual va ob'ektga yo'naltirilgan dasturlash tilining birikmasidir; shuning uchun C ++ ni gibrid til deb atash mumkin.

Endi nuqtaga kelganda, siz C ++ C dan sekinroq ekanligini eshitgansiz, ammo statistikani ko'rganmisiz? Dasturda ozgina o'zgarishlar kiritgandan so'ng, biz C ++ dasturini bir vaqtning o'zida yoki ba'zida C dasturida yozilgan dasturga qaraganda tezroq bajaramiz. Bu erda men Ikkilik qidirish bo'yicha ikkita savolni ko'rib chiqdim va ularni C va C ++ va C ++ 14-larda kodladim va ularning ish vaqtlarini taqqosladim.

Agar siz odatda C ++-da cin / cout-dan foydalanayotgan bo'lsangiz, unda quyidagi o'zgartirish foydali bo'lishi mumkin. Faqat dasturning boshiga qo'shing va uni asosiy qismidan foydalaning va siz borishingiz yaxshi.

Bu erda nima qilayotganini topishingiz mumkin.

1-savol. Sovun sirlari

Bu umumiy ikkilik qidirish savolidir, unda q so'rovlari berilgan va biz n elementlar bo'yicha q marta va uning murakkabligi idagi O (Q * Log (N)), bu erda massivda elementlar yo'q.

Siz bu erda echimni topishingiz mumkin.

Uni kodlash va katta sinov ishlarida ishga tushirishda men shuni oldim.

G ++ 5.4.0-dan foydalangan holda Q1-ning ishlash vaqti

Siz C C ++ 14 ga qaraganda tezroq ekanligini aniq ko'rishingiz mumkin, ammo diqqatga sazovor tomoni shundaki, ushbu modifikatsiyani (kuchaytirishni) ishlatishda C ++ 14 va C ++ lar C vaqtdan oshib ketishi aniq ko'rinib turibdi (zarur bo'lgan hollarda). katta sinov holatlari).

2-savol. O'yinni ishlab chiqishni boshlash

Bu N satr va M ustunlari bo'lgan 2-qatorli qatorda N-ning ikkilik qidiruvlarini bajarishni va keyin har bir satrda olingan javobning minimal sonini topishni o'z ichiga olgan oson o'rta masala. Murakkablik O (Nlog (M)) ga aylanadi.

Yechimni bu erda topish mumkin.

Endi uni 3 xil tilda kodlash bu erda nimaga ega bo'ldim:

G ++ 5.4.0-dan foydalangan holda Q2 ish vaqti

Bu erda ham C C ++ 14 dan yuqori ekanligi aniq ko'rinib turibdi, ammo ushbu modifikatsiyadan foydalanib, C ++ C ga nisbatan tezroq bo'ladi.

Ba'zilar hatto getchar () ni blokirovkadan foydalanadilar (garchi u buzilgan bo'lsa ham), bularning eng tezkoridir, chunki u to'g'ridan-to'g'ri registrlardan foydalanib, oqimlarni chetlab o'tib yozadi (faqat vaqt juda muhim bo'lsa, foydalaning). Ba'zida savollarga vaqt chegarasi shu qadar qattiq bo'ladiki, ushbu o'zgartirishlar juda muhim rol o'ynaydi, ularsiz TLE olish mumkin.

Tuzuvchi ham muhim rol o'ynaydi. Ulardan ikkitasi: G ++ 5.4.0 va CLANG. Tuzuvchi - bu dasturlash tilida (manba tili) yozilgan kod kodini boshqa kompyuter tiliga (maqsad tiliga) o'zgartiruvchi kompyuter dasturi (yoki dasturlar to'plami), bunda ko'pincha ob'ekt kodi deb nomlanadigan ikkilik shakl mavjud. Bu ishni tezroq bajaradigan kompilyator yaxshiroq bo'ladi.

ShUSh BOSHQARMASI

1. GCC, Java, Ada, FORTRAN, Go va hk kabi tillarni bilmaydigan tillarni qo'llab-quvvatlaydi.

2. GCC ko'plab til kengaytmalarini qo'llab-quvvatlaydi, ularning ba'zilari Clang tomonidan amalga oshirilmaydi. Masalan, C rejimida GCC o'rnatilgan funktsiyalarni qo'llab-quvvatlaydi va strada VLA-larga ruxsat beradigan kengaytmaga ega.

KLANGNING PROSSLARI

  1. Clang juda tezroq va GCC-ga qaraganda kamroq xotiradan foydalanadi.
  2. Clang + C ++ ni qo'llab-quvvatlash ko'p jihatdan GCC-ga qaraganda ko'proq mos keladi.
  3. Clang ko'plab kengaytmalarni qo'llab-quvvatlaydi, ularning ba'zilari GCC tomonidan amalga oshirilmaydi. Masalan, Clang iplarning xavfsizligini va kengaytirilgan vektor turlarini tekshirish uchun atributlarni taqdim etadi.
  4. "Clang" boshidanoq aniq va aniq tashxis qo'yish uchun (xato va ogohlantirish xabarlari) ishlab chiqilgan va ekspressiv diagnostikani qo'llab-quvvatlaydi.

Shu tariqa, kompyuter dasturlashida tez-tez ishlatiladigan ikkita til o'rtasidagi o'zaro taqqoslash bo'yicha ikkilik qidiruvdan foydalanib, ishlash vaqtini taqqoslash bo'yicha mening kichik qiziqarli faoliyatimni yakunlayman. Umid qilamanki, siz buni o'qib ma'lum bilimlarga ega bo'ldingiz va dasturlash tilini yaxshiroq tanlay olasiz.

Baxtli o'qish!