কম্পিউটার টিউটোরিয়াল

C++-এর লুকানো ফিচার ও ট্রিকস

এখানে আমরা C++ প্রোগ্রামিং ভাষার কিছু দরকারী ফিচার ও ট্রিকস দেখব যা প্রতিযোগিতামূলক প্রোগ্রামিং (competitive programming) এ কোড লেখার সময় বাঁচাতে সাহায্য করে। এক-এক করে উদাহরণ সহ আলোচনা করা হলো।

১. মডুলো অপারেটর (%) ছাড়া বিজোড়-জোড় সংখ্যা চেক করা

বিটওয়াইজ AND অপারেশন ব্যবহার করে সহজে এটি করা যায়। যেকোনো সংখ্যার সাথে ১ দিয়ে AND করলে ফলাফল নন-জিরো হলে সংখ্যাটি বিজোড়, অন্যথায় জোড়। কারণ সব বিজোড় সংখ্যার LSB (Least Significant Bit) ১ থাকে।

if ((n & 1) != 0) {
    // বিজোড়
} else {
    // জোড়
}

২. শিফট অপারেটর দিয়ে দ্রুত গুন ও ভাগ

যদি কোনো সংখ্যা ২n দিয়ে গুণ করতে হয়, তবে সেটি বাম দিকে n বার শিফট করলেই হবে। আবার ২n দিয়ে ভাগ করতে হলে ডান দিকে n বার শিফট করলেই হবে।

x = 40;
y = x << 2; // x * 4 = 160
x = 40;
y = x >> 2; // x / 4 = 10

৩. থার্ড ভেরিয়েবল ছাড়া دو সংখ্যা সওয়াপ করা

XOR অপারেটর ব্যবহার করে দুটি সংখ্যা সওয়াপ করা যায়।

// x এবং y সওয়াপ
x ^= y;
y ^= x;
x ^= y;

৪. strlen() ছাড়া স্ট্রিং ট্রাভার্সাল

স্ট্রিংয়ের প্রতিটি ক্যারেক্টার চেক করে নাল টার্মিনেটর পাওয়া পর্যন্ত লুপ চালানো যায়।

for(int i = 0; s[i]; i++) {
    cout << s[i];
}

৫. push_back() এর চেয়ে দ্রুত emplace_back()

STL কন্টেইনারে (যেমন vector) নতুন এলিমেন্ট যোগ করতে emplace_back() ব্যবহার করা দ্রুত, কারণ এটি মেমরি আলোকেশন বাড়ি করে কন্টেইনারের ভেতরেই অপশন দেয়।

৬. বিল্ট-ইন GCD ফাংশন

C++-এ __gcd(x, y) ব্যবহার করে দুটি সংখ্যার GCD বের করা যায়।

৭. অ্যারে সাইজের সীমা

মেইন ফাংশনে অ্যারে সাইজ প্রায় ১০৬ পর্যন্ত থাকতে পারে, কিন্তু গ্লোবালি ডিক্লেয়ার করলে ১০৭ পর্যন্ত সম্ভব।

৮. লগারিদম দিয়ে সবচেয়ে বড় ডিজিট বের করা

n = 4578;
double k = log10(n);
k = k - floor(k);
int x = pow(10, k); // x = 4 (সবচেয়ে বড় ডিজিট)

৯. লগারিদম দিয়ে ডিজিট কাউন্ট

n = 4578;
int digit_count = floor(log10(n)) + 1; // ৪

১০. ২-এর পাওয়ার কিনা চেক করা

x = 1024;
bool check = x && (!(x & (x-1))); // true হলে ২-এর পাওয়ার

১১. STL এলগরিদম: all_of, any_of, none_of

all_of(left, left + n, isPositive());  // সব পজিটিভ কিনা
any_of(left, left + n, isPositive());  // কত એક পজিটিভ কিনা
none_of(left, left + n, isPositive()); // কোনোটিই পজিটিভ নয়

১২. copy_n দিয়ে কন্টেইনার কপি

int src[5] = {10, 20, 30, 40, 50};
int des[5];
copy_n(src, 5, des);

১৩. iota() দিয়ে সিকোয়েন্স জেনারেট

int arr[5] = {0};
char str[5] = {0};
iota(arr, arr+5, 15); // {15, 16, 17, 18, 19}
iota(str, str+5, 'A'); // {'A','B','C','D','E'}

১৪. বাইনারি লিটারেল (০b প্রিফিক্স)

int x = 0b1101; // x = 13

১৫. কন্ডিশনাল অপারেটর ছাড়া কীওয়ার্ড ব্যবহার

C++-এ and, or, not ইত্যাদি কীওয়ার্ড ব্যবহার করা যায়।

x = 10;
if(x < 10 and x > 5)
    cout << "True" << endl;
else
    cout << "False" << endl; // True
  1. উইন্ডোজ ১০ লুকানো ফিচার: ভালো নাকি খারাপ?

  2. C++ প্রোগ্রামিং ল্যাঙ্গুয়েজের বৈশিষ্ট্য

  3. C++-এর কী ফিচারগুলো C#-এ নেই?

  4. macOS মোজাভে ১০টি কম পরিচিত ফিচার আবিষ্কার করুন