C Vs C ++ Vs C ++ 14 (ການປຽບທຽບເວລາແລ່ນ)

ໃນຂະນະທີ່ຂຽນໂປແກຼມ, ບາງຄັ້ງທ່ານອາດຈະຕົກຢູ່ໃນ ຕຳ ແໜ່ງ ຄືກັບວ່າທ່ານມີທາງເລືອກໃນການເຮັດ ຄຳ ຖາມນັ້ນໃນ C ແລະ C ++ ຫຼື C ++ 14, ຫຼັງຈາກນັ້ນ, ປັດໃຈຕັດສິນໄດ້ມາຮອດເວລາແລ່ນແລະຄວາມສາມາດຂອງໂປແກຼມໃນການປັບຕົວເຂົ້າກັບການປ່ຽນແປງໃນ ອະ​ນາ​ຄົດ . ທີ່ນີ້ C ++, C ++ 14 ມີຂອບເຂດ C ເນື່ອງຈາກມັນມີ ໜ້າ ທີ່ທີ່ຖືກ ກຳ ນົດໄວ້ໃນ super Library ໃນຫ້ອງສະມຸດຂອງມັນທີ່ມີຊື່ວ່າມາດຕະຖານຫໍສະ ໝຸດ ທີ່ເປັນທີ່ນິຍົມກັນເອີ້ນວ່າ STL ເຊິ່ງເປັນຊຸດຂອງຊັ້ນແມ່ແບບ C ++ ເພື່ອສະ ໜອງ ໂຄງສ້າງແລະ ໜ້າ ທີ່ຂໍ້ມູນການຂຽນໂປແກຼມທົ່ວໄປເຊັ່ນ: ລາຍຊື່, stacks , ອາຄານແລະອື່ນໆ. ມັນແມ່ນຫ້ອງສະມຸດຂອງຫ້ອງຮຽນບັນຈຸ, ສູດການຄິດໄລ່ແລະຕົວວັດແທກເຊິ່ງຊ່ວຍປະຢັດເວລາຫລາຍໂຕນໂດຍການສະ ໜອງ ໂຄງສ້າງຂໍ້ມູນຕ່າງໆໃຫ້ແກ່ນັກຂຽນໂປແກຼມໂດຍການກົດປຸ່ມ.

ຄວາມແຕກຕ່າງທີ່ ສຳ ຄັນລະຫວ່າງ C ແລະ C ++ ແມ່ນ C ແມ່ນພາສາການຂຽນໂປແກຼມທີ່ເປັນລະບຽບແລະບໍ່ສະ ໜັບ ສະ ໜູນ ຊັ້ນຮຽນແລະວັດຖຸຕ່າງໆ, ໃນຂະນະທີ່ C ++ ແມ່ນການປະສົມປະສານຂອງທັງສອງພາສາການຂຽນໂປແກຼມຂັ້ນຕອນແລະຈຸດປະສົງ; ສະນັ້ນ C ++ ສາມາດເອີ້ນວ່າພາສາປະສົມ.

ມາຮອດຈຸດນີ້, ທ່ານອາດຈະໄດ້ຍິນວ່າ C ++ ຊ້າກວ່າ C ແຕ່ທ່ານໄດ້ເຫັນສະຖິຕິແລ້ວບໍ? ຫລັງຈາກເຮັດການດັດແປງເລັກນ້ອຍໃນໂປແກຼມພວກເຮົາສາມາດເຮັດໃຫ້ໂປຣແກຣມ C ++ ດຳ ເນີນການໄດ້ໃນເວລາດຽວກັນຫລືບາງຄັ້ງກໍ່ໄວກວ່າໂປແກມທີ່ສອດຄ້ອງກັນທີ່ຂຽນໃນ C. ນີ້ຂ້ອຍໄດ້ເອົາ 2 ຄຳ ຖາມໃນ Binary Search ແລ້ວຂຽນລະຫັດໃສ່ C ແລະ C ++ ແລະ C ++ 14 ແລ້ວສົມທຽບເວລາແລ່ນຂອງພວກເຂົາ.

ຖ້າທ່ານມັກໃຊ້ cin / cout ໃນ C ++ ແລ້ວການດັດແກ້ຕໍ່ໄປນີ້ອາດຈະເປັນປະໂຫຍດຫຼາຍ. ພຽງແຕ່ລວມເອົາມັນໃນຕອນເລີ່ມຕົ້ນຂອງໂປແກຼມແລະໃຊ້ມັນໃນຫລັກແລະທ່ານກໍ່ດີທີ່ຈະໄປ.

ທ່ານສາມາດຊອກຫາສິ່ງທີ່ມັນເຮັດຢູ່ບ່ອນນີ້.

ຄຳ ຖາມທີ 1. ຄວາມລຶກລັບສະບູ

ມັນແມ່ນ ຄຳ ຖາມຄົ້ນຫາໄບນາລີທົ່ວໄປທີ່ ຄຳ ຖາມ q ຖືກໃຫ້ແລະພວກເຮົາຕ້ອງໄດ້ຄົ້ນຫາຖານສອງ q ຈຳ ນວນເທື່ອກ່ຽວກັບອົງປະກອບ n ແລະ id ສັບສົນຂອງມັນ O (Q * Log (N)) ບ່ອນທີ່ N ບໍ່ແມ່ນອົງປະກອບໃນແຖວ.

ທ່ານສາມາດຫາທາງອອກທີ່ນີ້.

ໃນເວລາທີ່ລະຫັດມັນແລະແລ່ນມັນໃນກໍລະນີທົດສອບໃຫຍ່ໆນີ້ແມ່ນສິ່ງທີ່ຂ້ອຍໄດ້ຮັບ.

ເວລາແລ່ນຂອງ Q1 ໂດຍໃຊ້ G ++ 5.4.0

ທ່ານສາມາດເຫັນໄດ້ຢ່າງຈະແຈ້ງວ່າ C ແມ່ນໄວກ່ວາ C ++ 14 ແຕ່ສິ່ງທີ່ຄວນສັງເກດແມ່ນວ່າເມື່ອໃຊ້ການດັດແປງນັ້ນ (ເພີ່ມຂື້ນ) ມັນສາມາດເຫັນໄດ້ຊັດເຈນວ່າ C ++ 14 ແລະ C ++ outperforms C ໃນເວລາປະຕິບັດຂອງພວກເຂົາ (ໃນກໍລະນີ ກໍລະນີທົດສອບໃຫຍ່).

Q2. ການເລີ່ມຕົ້ນການພັດທະນາເກມ

ນີ້ແມ່ນ ຄຳ ຖາມທີ່ມີຄວາມງ່າຍດາຍປານກາງເຊິ່ງກ່ຽວຂ້ອງກັບການຄົ້ນຫາຖານສອງ N ກ່ຽວກັບແຖວ 2 ມິຕິທີ່ມີ N ແຖວແລະແຖວຖັນ M ແລະຫຼັງຈາກນັ້ນຊອກຫາ ຕຳ ່ສຸດຂອງ ຄຳ ຕອບທີ່ໄດ້ຮັບໃນແຕ່ລະແຖວເຊິ່ງເປັນ ຄຳ ຕອບສຸດທ້າຍຂອງພວກເຮົາ. ຄວາມສັບສົນປ່ຽນເປັນ O (Nlog (M)).

ການແກ້ໄຂສາມາດພົບໄດ້ທີ່ນີ້.

ຕອນນີ້ ກຳ ລັງຂຽນມັນຢູ່ 3 ພາສາທີ່ແຕກຕ່າງກັນນີ້ແມ່ນສິ່ງທີ່ຂ້ອຍໄດ້ຮັບ:

ເວລາແລ່ນຂອງ Q2 ໂດຍໃຊ້ G ++ 5.4.0

ນີ້ຍັງສາມາດເຫັນໄດ້ຢ່າງຊັດເຈນວ່າ C outperformes C ++ 14 ແຕ່ໃຊ້ການດັດແປງນັ້ນ, C ++ ໄວກວ່າ C.

ບາງຄົນກໍ່ໃຊ້ getchar () ທີ່ຖືກປົດລັອກ (ເຖິງແມ່ນວ່າມັນມີການຮົ່ວໄຫຼດ້ານຄວາມປອດໄພ), ເຊິ່ງໄວທີ່ສຸດໃນບັນດາສິ່ງເຫຼົ່ານີ້ຍ້ອນວ່າມັນອ່ານແລະຂຽນໂດຍກົງໂດຍໃຊ້ການລົງທະບຽນໂດຍຂ້າມສາຍນ້ ຳ ໃນລະຫວ່າງ (ໃຊ້ພຽງແຕ່ຖ້າວ່າເວລາມີຄວາມກັງວົນຫຼາຍ). ບາງຄັ້ງການຜູກມັດເວລາ ສຳ ລັບ ຄຳ ຖາມແມ່ນເຄັ່ງຄັດຫຼາຍເພາະວ່າການດັດແປງເຫຼົ່ານີ້ມີກົດລະບຽບທີ່ ສຳ ຄັນ, ໂດຍບໍ່ມີພວກມັນອາດຈະໄດ້ຮັບ TLE.

ນັກຂຽນບົດຍັງມີບົດບາດ ສຳ ຄັນ. ສອງໃນນັ້ນແມ່ນ G ++ 5.4.0 ແລະ CLANG. Compiler ແມ່ນໂປແກຼມຄອມພິວເຕີ້ (ຫຼືຊຸດຂອງໂປແກຼມ) ທີ່ປ່ຽນລະຫັດແຫຼ່ງທີ່ຂຽນເປັນພາສາການຂຽນໂປແກຼມ (ພາສາທີ່ມາ) ເປັນພາສາຄອມພິວເຕີ້ອື່ນ (ພາສາເປົ້າ ໝາຍ), ເຊິ່ງຕໍ່ມາມັກຈະມີຮູບແບບຖານສອງທີ່ເອີ້ນວ່າ code code. ນັກຂຽນທີ່ສາມາດເຮັດວຽກນີ້ໄດ້ໄວຂຶ້ນຈະດີກວ່າ.

PROS OF GCC

1. GCC ສະ ໜັບ ສະ ໜູນ ພາສາທີ່ຄຶດບໍ່ໄດ້ ໝາຍ ເຖິງ, ເຊັ່ນ Java, Ada, FORTRAN, Go, ແລະອື່ນໆ.

2. GCC ສະ ໜັບ ສະ ໜູນ ການຂະຫຍາຍພາສາຫຼາຍຢ່າງ, ບາງອັນບໍ່ໄດ້ຖືກປະຕິບັດໂດຍ Clang. ຍົກຕົວຢ່າງ, ໃນໂຫມດ C, GCC ສະ ໜັບ ສະ ໜູນ ໜ້າ ທີ່ຮັງແລະມີສ່ວນຂະຫຍາຍທີ່ອະນຸຍາດໃຫ້ VLAs ໃນໂຄງສ້າງ.

PROS OF CLANG

  1. Clang ແມ່ນໄວຫຼາຍແລະໃຊ້ຄວາມຊົງ ຈຳ ທີ່ ໜ້ອຍ ກວ່າ GCC.
  2. ການສະ ໜັບ ສະ ໜູນ ຂອງ Clang ສຳ ລັບ C ++ ແມ່ນກົງກັບ GCC ຫຼາຍໃນຫຼາຍດ້ານ.
  3. Clang ສະ ໜັບ ສະ ໜູນ ການຂະຫຍາຍພາສາຫຼາຍຢ່າງ, ບາງອັນບໍ່ໄດ້ຖືກຈັດຕັ້ງປະຕິບັດໂດຍ GCC. ຍົກຕົວຢ່າງ, Clang ໃຫ້ຄຸນລັກສະນະ ສຳ ລັບການກວດສອບຄວາມປອດໄພຂອງກະທູ້ແລະປະເພດ vector ຂະຫຍາຍ.
  4. Clang ໄດ້ຖືກອອກແບບມາຕັ້ງແຕ່ເລີ່ມຕົ້ນເພື່ອສະ ໜອງ ການບົ່ງມະຕິທີ່ຈະແຈ້ງແລະຊັດເຈນທີ່ສຸດ (ຂໍ້ຜິດພາດແລະຂໍ້ຄວາມເຕືອນ), ແລະລວມທັງການສະ ໜັບ ສະ ໜູນ ການວິນິດໄສທີ່ສະແດງອອກ.

ສະນັ້ນສິ່ງນີ້ສະຫລຸບກິດຈະ ກຳ ມ່ວນໆເລັກໆນ້ອຍໆຂອງຂ້ອຍໃນການປຽບທຽບເວລາການປະຕິບັດລະຫວ່າງສອງພາສາທີ່ໃຊ້ກັນຫຼາຍທີ່ສຸດໃນການຂຽນໂປແກຼມຄອມພິວເຕີ້ໂດຍໃຊ້ການຄົ້ນຫາຖານສອງເປັນຕົວຢ່າງ. ຂ້າພະເຈົ້າຫວັງວ່າທ່ານຈະໄດ້ຮັບຄວາມຮູ້ບາງຢ່າງໂດຍການອ່ານສິ່ງນີ້ແລະຈະສາມາດເລືອກພາສາການຂຽນໂປແກຼມໃນທາງທີ່ດີກວ່າ.

ຍິນດີອ່ານ!