Computer >> Máy Tính >  >> Lập trình >> C ++

Một số thủ thuật C ++ hữu ích cho người mới bắt đầu trong Lập trình cạnh tranh

Sau đây chúng ta sẽ thấy một số thủ thuật hay của ngôn ngữ lập trình C ++ có thể giúp ích cho chúng ta trong các lĩnh vực khác nhau. Giống như nếu chúng ta muốn tham gia một số sự kiện lập trình cạnh tranh, thì những thủ thuật này sẽ giúp chúng ta giảm thời gian viết mã. Hãy để chúng tôi xem từng ví dụ một.

  • Kiểm tra xem một số là số lẻ hay số chẵn mà không cần sử dụng toán tử%. Thủ thuật này là đơn giản. Chúng ta có thể thực hiện phép toán theo bitwise AND với số và 1. Nếu kết quả là khác 0 thì giá trị này là số lẻ, ngược lại là số chẵn. Logic quá đơn giản. Tất cả các số lẻ đều có 1 ở LSb. Vì vậy, sau khi thực hiện AND với 1, nó sẽ che tất cả các ký tự ngoại trừ LSb để chúng ta có thể dễ dàng nhận được kết quả mong muốn.
 if ((n &1)! =0) {// cái này là lẻ} else {// Cái này chẵn} 
  • Nhân và chia nhanh bằng cách sử dụng toán tử shift. Nếu chúng ta muốn nhân một số với một số như 2n thì chúng ta có thể đơn giản chuyển số sang trái n lần. Tương tự, nếu chúng ta muốn chia một số cho 2n thì hãy chuyển số đó sang phải n lần.
x =40; y =x <<2; // x sẽ nhân với 4 nên y =160cout <> 2; // x sẽ chia cho 4 nên y =10cout <
  • Chúng tôi có thể hoán đổi hai số mà không cần sử dụng các biến thứ ba. Điều này có thể được thực hiện bằng cách sử dụng các toán tử + và -. Nhưng chúng ta cũng có thể làm điều đó bằng cách sử dụng toán tử XOR bitwise. Bạn có thể kiểm tra các con số theo cách thủ công để chắc chắn hơn.
 // hoán đổi x và yx ^ =y; y ^ =x; x ^ =y; 
  • Đôi khi có một số ràng buộc, chúng tôi không thể sử dụng hàm strlen () trong mã của mình. Trong trường hợp đó, chúng ta tạo hàm strlen () của riêng mình. Nếu trường hợp chỉ truy cập các ký tự, thì chúng tôi thực sự không cần phải làm điều này. Chúng ta có thể kiểm tra xem ký tự ở vị trí i có hợp lệ (khác 0) hay không. Nếu giá trị này khác 0, chúng ta có thể đi qua, nếu không thì dừng lại.
 for (int i =0; s [i]; i ++) {cout < 
  • Thông thường, chúng tôi sử dụng hàm push_back () trong STL để thêm phần tử mới vào một số vùng chứa như vectơ, v.v. Nếu không sử dụng hàm đó, chúng tôi cũng có thể sử dụng emplace_back (). Chức năng này nhanh hơn nhiều. Điều này không cấp phát bộ nhớ ở nơi khác, nó sẽ thêm bộ nhớ đã cấp phát vào vùng chứa.
  • C ++ cung cấp hàm GCD có sẵn. Chúng ta có thể sử dụng chúng trong các trường hợp khác nhau. Cú pháp như dưới đây.
 __gcd (x, y) // tìm GCD của x và y 
  • Kích thước tối đa của một mảng trong hàm main là 10 ^ 6. Nhưng nếu mảng được khai báo toàn cục, chúng ta có thể khai báo kích thước lên đến 10 ^ 7.
  • Chúng tôi có thể tính toán chữ số quan trọng nhất của bất kỳ số nào bằng thao tác ghi nhật ký. Hãy xem logic sau để có được ý tưởng
 n =4578; double k =log10 (n); k =k - floor (k); int x =pow (10, k); // x là chữ số có nghĩa nhất 
  • Tính toán trực tiếp số chữ số bằng thao tác nhật ký. Chúng tôi không sử dụng bất kỳ vòng lặp nào cho việc này.
 n =4578; int digit_count =floot (log10 (n)) + 1 
  • Chúng tôi có thể kiểm tra trực tiếp con số có phải là lũy thừa của 2 hay không bằng cách sử dụng logic này.
 x =1024; bool check =x &&(! (x &(x-1))); // nếu điều này là đúng, thì lũy thừa của hai. 
  • Một số thuật toán sẵn có trong C ++, có thể kiểm tra các điều kiện sau.
 all_of (left, left + n, isPositive ()); // kiểm tra tất cả là tích cực hay notany_of (left, left + n, isPositive ()); // kiểm tra ít nhất một dương hay không.none_of (left, left + n, isPositive ()); // kiểm tra không có phần tử nào là dương 
  • Chức năng sao chép để sao chép các phần tử từ vùng chứa này sang vùng chứa khác.
 int src [5] ={10, 20, 30, 40, 50}; int des [5]; copy_n (src, 5, dest); 
  • Có một thuật toán được gọi là itoa (). Thuật toán này có thể được sử dụng để tạo một dải giá trị tăng tuần tự như thể bằng cách gán giá trị ban đầu cho * trước, sau đó sử dụng giá trị bằng cách sử dụng toán tử tăng sau.
 int arr [5] ={0}; char str [5] ={0}; itoa (arr, arr + 5, 15); // nó sẽ tạo ra {15, 16, 17, 18, 19} itoa (str, str + 5, ‘A’); // nó sẽ tạo ra {‘A’, ‘B’, ‘C’, ‘D’, ‘E’} 
  • Gán giá trị ở dạng Nhị phân. Chúng ta có thể sử dụng tiền tố 0b với một số số nhị phân để biểu thị rằng số đó được cung cấp ở dạng nhị phân.
 int x =0b1101; // thì x sẽ giữ 13 
  • Trong C ++, chúng ta có thể sử dụng các từ khoá mà không cần sử dụng các toán tử điều kiện. Từ khóa Like "và" có thể được sử dụng thay cho "&".
 x =10; if (x <10 và x> 5) cout <<“True” <