ที่นี่เราจะเห็นเคล็ดลับดีๆ ของภาษาการเขียนโปรแกรม C++ ที่สามารถช่วยเราได้ในด้านต่างๆ เช่นเดียวกับถ้าเราต้องการมีส่วนร่วมในกิจกรรมการเขียนโปรแกรมการแข่งขัน เทคนิคเหล่านี้จะช่วยให้เราลดเวลาในการเขียนโค้ดได้ เรามาดูตัวอย่างเหล่านี้กันทีละคน
ตรวจสอบว่าตัวเลขเป็นเลขคี่หรือคู่โดยไม่ใช้ตัวดำเนินการ % เคล็ดลับนี้เป็นเรื่องง่าย เราสามารถดำเนินการระดับบิต AND ด้วยตัวเลขและ 1 หากผลลัพธ์ไม่เป็นศูนย์ ค่านี้เป็นเลขคี่ ไม่เช่นนั้นจะเป็นเลขคู่ ตรรกะง่ายเกินไป เลขคี่ทั้งหมดมี 1 ที่ LSb ดังนั้นหลังจากดำเนินการ AND ด้วย 1 มันจะปิดบังอักขระทั้งหมดยกเว้น LSb เพื่อให้เราได้ผลลัพธ์ที่ต้องการอย่างง่ายดาย
if ((n & 1) != 0){ //this is odd } else { //This is even }
คูณและหารอย่างรวดเร็วโดยใช้ตัวดำเนินการกะ หากเราต้องการคูณตัวเลขด้วยตัวเลขเช่น 2n เราก็สามารถเปลี่ยนตัวเลขไปทางซ้ายได้ n ครั้ง ในทำนองเดียวกัน หากเราต้องการหารตัวเลขด้วย 2n ให้เลื่อนตัวเลขไปทางขวา n ครั้ง
x = 40; y = x << 2; //x will be multiplied with 4, so y = 160 cout << x; x = 40; y = x >> 2; //x will be divided by 4, so y = 10 cout << x;
เราสามารถสลับตัวเลขสองตัวโดยไม่ต้องใช้ตัวแปรตัวที่สาม ซึ่งสามารถทำได้โดยใช้ตัวดำเนินการ + และ – แต่เราสามารถทำได้โดยใช้ตัวดำเนินการ XOR ระดับบิตด้วย คุณสามารถตรวจสอบตัวเลขได้ด้วยตนเองเพื่อให้แน่ใจ
//swap x and y x ^= y; y ^= x; x ^= y;
บางครั้งมีข้อจำกัดบางอย่างที่เราไม่สามารถใช้ฟังก์ชัน strlen() ในโค้ดของเราได้ ในกรณีนั้น เราสร้างฟังก์ชัน strlen() ของเราเอง หากกรณีนี้เข้าถึงได้เฉพาะตัวละคร เราก็ไม่จำเป็นต้องทำเช่นนี้จริงๆ เราสามารถตรวจสอบว่าอักขระที่ตำแหน่ง i ถูกต้อง (ไม่ใช่ศูนย์) หรือไม่ หากนี่ไม่ใช่ศูนย์ เราข้ามได้ ไม่เช่นนั้นให้หยุด
for(int i = 0; s[i]; i++) { cout << s[i]; }
บ่อยครั้งที่เราใช้ฟังก์ชัน push_back() ใน STL เพื่อเพิ่มองค์ประกอบใหม่ในคอนเทนเนอร์บางตัว เช่น vector เป็นต้น โดยไม่ใช้สิ่งนั้น เราสามารถใช้ emplace_back() ได้เช่นกัน ฟังก์ชั่นนี้เร็วกว่ามาก สิ่งนี้ไม่ได้จัดสรรหน่วยความจำไว้ที่อื่น แต่จะผนวกหน่วยความจำที่จัดสรรไว้ในคอนเทนเนอร์
C ++ มีฟังก์ชัน GCD ในตัว เราสามารถใช้ในกรณีต่างๆ ไวยากรณ์เป็นเหมือนด้านล่าง
__gcd(x, y) //find GCD of x and y
ขนาดสูงสุดของอาร์เรย์ในฟังก์ชันหลักคือลำดับที่ 10^6 แต่ถ้าอาร์เรย์มีการประกาศทั่วโลก เราสามารถประกาศขนาดได้ถึง 10^7
เราสามารถคำนวณตัวเลขที่มีนัยสำคัญของตัวเลขใดๆ โดยใช้การดำเนินการบันทึก ดูตรรกะต่อไปนี้เพื่อรับแนวคิด
n = 4578; double k = log10(n); k = k – floor(k); int x = pow(10, k); //x is the most significant digit
คำนวณจำนวนหลักโดยตรงโดยใช้การดำเนินการบันทึก เราไม่ได้ใช้การวนซ้ำสำหรับสิ่งนี้
n = 4578; int digit_count = floot(log10(n)) + 1
เราสามารถเช็คเลขยกกำลัง 2 ได้หรือไม่ได้โดยตรงโดยใช้ลอจิกนี้
x = 1024; bool check = x && (!(x & (x-1))); //if this is true, then power of two.
อัลกอริธึมในตัวบางตัวมีอยู่ใน C++ ซึ่งสามารถตรวจสอบเงื่อนไขต่อไปนี้ได้
all_of(left, left + n, isPositive()); //check all are positive or not any_of(left, left + n, isPositive()); //check at least one positive or not. none_of(left, left + n, isPositive()); //check no elements are positive
ฟังก์ชันคัดลอกเพื่อคัดลอกองค์ประกอบจากคอนเทนเนอร์หนึ่งไปยังอีกคอนเทนเนอร์หนึ่ง
int src[5] = {10, 20, 30, 40, 50}; int des[5]; copy_n(src, 5, dest);
มีอัลกอริทึมที่เรียกว่า itoa() อัลกอริธึมนี้สามารถใช้เพื่อสร้างช่วงของค่าที่เพิ่มขึ้นตามลำดับราวกับว่าโดยการกำหนดค่าเริ่มต้นเป็น * ก่อน จากนั้นจึงใช้ค่าโดยใช้ตัวดำเนินการ post increment
int arr[5] = {0}; char str[5] = {0}; itoa(arr, arr+5, 15); //it will generate {15, 16, 17, 18, 19} itoa(str, str+5, ‘A’); //it will generate {‘A’, ‘B’, ‘C’, ‘D’, ‘E’}
กำหนดค่าในรูปแบบไบนารี เราสามารถใช้ 0b นำหน้าด้วยเลขฐานสองเพื่อแสดงว่าตัวเลขนี้มีให้ในรูปแบบไบนารี
int x = 0b1101; //then x will hold 13
ใน C ++ เราสามารถใช้คำหลักโดยไม่ต้องใช้ตัวดำเนินการตามเงื่อนไข เช่นเดียวกับคำหลัก 'และ' สามารถใช้แทน '&' ได้
x = 10; if(x < 10 and x > 5) cout << “True” << endl; else cout << “False” << endl; //This will return True