সি ++ এ গল্ফ করার টিপস


48

সি ++ এ গল্ফ করার জন্য আপনার কাছে কোন সাধারণ টিপস রয়েছে? আমি এমন ধারণাগুলি সন্ধান করছি যা সাধারণভাবে গল্ফ সমস্যাগুলিতে প্রয়োগ করা যেতে পারে যা সি ++ এর সাথে অন্তত কিছুটা নির্দিষ্ট (যেমন "মন্তব্যগুলি সরান" কোনও উত্তর নয়)। দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন।


4
সিতে গল্ফ করার জন্য অনেক টিপস সি ++ এর ক্ষেত্রেও প্রযোজ্য, সুতরাং অনুগ্রহ করে ধরে নিন যে পাঠকরা সেই প্রশ্নের সাথে পরিচিত; কেবলমাত্র এখানে যদি আপনার এমন কিছু থাকে যা বৈধ সি গল্ফিং টিপও নয়।
টবির স্পিড

@ টবিস্পাইট সম্ভবত প্রশ্ন আইডির পাশাপাশি তাদের একই url থাকার কারণে have
NoOneIs এখানে

সি এবং সি ++, এমনকি 'গল্ফিং' টাইপ না হলেও সঠিক এবং সহজ (যদি কেউ সি ++ এর সঠিক উপসেট বিবেচনা করে)
রোজলুপি

উত্তর:


24

টার্নারি শর্তসাপেক্ষ অপারেটরটি ?:প্রায়শই স্ট্যান্ড ইন হিসাবে ব্যবহার করা যেতে পারে if- elseযথেষ্ট পরিমাণে সঞ্চয়ী হিসাবে বিবৃতি।

এটি এর মতো বিশেষ মূল্যবান যে এটি হিসাবে বিকল্প বিকল্পগুলি নির্বাচন করতে ব্যবহার করা যেতে পারে

#include <iostream>
#include <cstdlib>
int main(int c, char**v){
  int o=0,e=0,u;
  while(--c) ((u=atoi(v[c]))%2?o:e)+=u;
  std::cout << "Sum of odds " << o <<std::endl
            << "Sum of evens " << e <<std::endl;
}

কোডটি এখনও চালায় নি, তবে আমার মনে হয় না যে এটি আপনার কথার মতো কাজ করে। ((u = atoi (v [c]))% 2? o: e) + = আপনি বাম দিকের অভিব্যক্তিটির সাথে u এর মান যোগ করা ছাড়া কিছুই করেন না যা মান o বা e এর মান পায় তবে ও ও ভেরিয়েবলগুলি অপরিবর্তিত থাকুন যাতে তারা সর্বদা 0 থাকে what কী ঘটবে তা দেখতে কোডটি পরীক্ষা করুন। এটিকে কাজ করার জন্য আপনার ঠিকানাগুলি ব্যবহার করা উচিত
বোগদান আলেকজান্দ্রু

4
@ বোগদান অ্যালেক্সান্দ্রু এর ... এটি চালান। এটা সত্যিই কাজ করে। বন্ধনীসমন্বিত অভিব্যক্তি মান এক একটি রেফারেন্স বা অন্য eএবং o। মনে রাখবেন যে এই অপারেটর সিটিতে কীভাবে কাজ করে যেখানে এই কৌশলটি কাজ করে না কারণ এটি কোনও মূল্যমান হতে পারে না তার থেকে এটির থেকে আলাদা Note
dmckee

5 টি অক্ষর সংরক্ষণ করুন এর std::endlসাথে প্রতিস্থাপন করুন'\n'
মুকুল কুমার

3
@ মুকুলকুমার ঠিক আছে, হ্যাঁ তবে এই টিপটি প্রদর্শনের উদ্দেশ্যে, আমি স্বচ্ছতার জন্য টেরিনারি-কন্ডিশনাল অ-গল্ফ বাদে সমস্ত কিছু রেখেছি।
dmckee

22

কখনও কখনও আপনি স্থিতিশীল স্টোরেজ সময়কাল ভেরিয়েবল (বিশেষত সমস্ত গ্লোবাল স্কোপ ভেরিয়েবলগুলি অন্তর্ভুক্ত করে) শুরুতে স্বয়ংক্রিয়ভাবে শূন্য-সূচনা হয় (স্বয়ংক্রিয় ভেরিয়েবলের বিপরীতে যেখানে আপনার কোনও গ্যারান্টি নেই) ব্যবহার করে দুটি অক্ষর সংরক্ষণ করতে পারেন। পরিবর্তে তাই

int main()
{
  int a=0;
  // ...
}

তুমি লিখতে পারো

int a;
int main()
{
  // ...
}

+1 তবে অবশ্যই খারাপ অভ্যাস
সোমড্লোস

@ মন্ডলস: গল্ফিং মূলত খারাপ অভ্যাসকে বোঝায়।
celtschk

15

কিছু সংকলক (যেমন জিসিসি) বহু-চরিত্রের ধ্রুবককে সমর্থন করে । যখন একটি বড় পূর্ণসংখ্যার মান প্রয়োজন হয় এটি কয়েকটি অক্ষর সংরক্ষণ করতে পারে। উদাহরণ:

int n='  ';

মান বাস্তবায়ন-নির্দিষ্ট। সাধারণত এর মান 'ab'হয় 256*'a'+'b'বা হয় 'a'+256*'b'। উদ্ধৃতি চিহ্নগুলির মধ্যে আপনি 4 টি পর্যন্ত অক্ষর নির্দিষ্ট করতে পারেন।


3
জিসিসি? মানে জি ++ ?
নাথান ওসমান

6
@ জর্জি এডিসন: জিসিসি জিএনইউ সংকলক সংগ্রহকে বোঝায়, এটি সি, সি ++, গো ইত্যাদির জন্য সমস্ত সামনের ক্ষেত্রকে ঘিরে রেখেছে
জো অ্যাডামস

@ জোয়ি: আমি জানি, তবে এটি জিএনইউ সি সংকলকটির নামও।
নাথান ওসমান

25
@ জর্জি: জিএনইউ সি সংকলককে জিসিসি বলা হয়, জিসিসি নয়।
ফ্রেডওভারফ্লো 17'12

পাশাপাশি মনে রাখতে হবে, আমি ভুলে যেতে পারে।

12

যেটি আমি কাজে পেলাম:

নন-শূন্য মানগুলি trueবুলিয়ান অভিব্যক্তিগুলিতে মূল্যায়ন করে এবং বুলিয়ানদের সাথে ডিল x&&yকরার x*yসময় এটির মূল্যায়ন করে এমনটি গ্রহণ করে

(x!=0 && y!=0)

মূল্যায়ন

(x*y)

নীচে উল্লিখিত হিসাবে আপনাকে কেবল ওভারফ্লো সম্পর্কে সচেতন হতে হবে।


2
প্রযুক্তিগতভাবে, এটি x!=0 && y!=0। তবে গুণটি ব্যবহার করার সময় আপনার অতিরিক্ত প্রবাহের সাথে সতর্ক হওয়া দরকার। ৩২-বিট পূর্ণসংখ্যা ব্যবহার করার সময় x = y = 65536 (এবং দুটি পাওয়ারের আরও কয়েকটি সংমিশ্রণ) এক্স * y = 0 প্রদান করবে
মার্টিন এন্ডার

হ্যা, তা ঠিক. আমি এটি দ্বিগুণ মাত্রার অ্যারে বাউন্ড হিসাবে ব্যবহার করেছি এখানে চেক করুন: কোডগলফ.স্ট্যাকেক্সেঞ্জাওটা / / 75757171১/3১7777। যেখানে তাতে কিছু যায় আসে না। আমি এই পয়েন্টগুলিতে সম্পাদনা করব
বাল্ড্রিক

1
নোট তবে &&এর একটি স্বল্প-সার্কিট আচরণ *রয়েছে যার অভাব রয়েছে। উদাহরণস্বরূপ, যদি আপনি প্রতিস্থাপন করতে পারবেন না i++!=0&&j++!=0সঙ্গে i++*j++
celtschk

হ্যাঁ, ভাল পয়েন্ট তবে আপনি যদি শুদ্ধভাবে বুলিয়ান বীজগণিত করছেন, তবে এটি কাজ করে
বাল্ড্রিক

11

নিম্নলিখিত ধরণের ব্যবহার করুন:

u64, s64, u32, s32 (or int)

পুনরাবৃত্ত শব্দ / প্রকারের জন্য, ব্যবহার করুন #defines:

#define a while

whileঅতিরিক্ত 10 টি অক্ষর তৈরি করতে যদি আপনি প্রচুর পরিমাণে ব্যবহার করেন তবে এটি কেবল মূল্যবান । ( প্রায় 4। )


1
U64, s64, u32 এবং s32 প্রকারগুলি সি ++ এর অংশ নয়। এগুলি আপনার সংকলকের একটি অ-মানক এক্সটেনশন হতে পারে (যদিও আমি তাদের কখনই দেখিনি)।
celtschk

5
এই দুটি টিপস দুটি পৃথক উত্তরে আরও ভালভাবে স্থাপন করা হবে যাতে তাদের পৃথকভাবে ভোট দেওয়া যায়।
ট্রাইকোপলাক্স


10

যখন সম্ভব, পরিবর্তন &&এবং ||করতে &এবং |যথাক্রমে।

সরল যদি বিবৃতি ব্যবহার করার সময়:

if(<condition>)<stuff>;

এতে পরিবর্তন করা যেতে পারে:

<condition>?<stuff>:<any single letter variable>;

যা একটি চরিত্র সংরক্ষণ করে।


8

পরিবর্তে একটি অক্ষর ব্যবহার while(1), ব্যবহার for(;;), সংরক্ষণ করুন :)


8

খোলা এবং কাছাকাছি ধনুর্বন্ধনী পরিবর্তে কমা অপারেটর ব্যবহার করে কয়েকটি অক্ষর বাঁচাতে পারে, আপনার যদি এমন পরিস্থিতি হয় যেখানে আপনার ধারাগুলির মধ্যে একটির বেশি বক্তব্য থাকে:

if(c){x=1;cout<<"Hi";y=2;}else{x=2;cout<<"Bye";y=3;}

বনাম

if(c)x=1,cout<<"Hi",y=2;else x=2,cout<<"Bye",y=3;###

দুটি চরিত্র একটি সরল আইএফ বা তিনটি আইএফ / ইএলএসইয়ের জন্য সংরক্ষণ করা হয়েছে।

সি এবং সি ++ এর মধ্যে পার্থক্যের পয়েন্ট হিসাবে, সামগ্রিকভাবে C ++ তে কমা প্রকাশের ফলাফলটি লভ্যালু হিসাবে ব্যবহার হতে পারে ... FWIW।


7

যেহেতু অ্যারে উপাদানগুলি একে অপরের পরে স্মৃতিতে সরাসরি সংরক্ষণ করা হয়, এর পরিবর্তে এই জাতীয় কিছু:

for(int x = 0; x < 25; x++) {
    for(int y = 0; y < 25; y++)
        array[x][y] = whatever;
}

আপনি এর মতো কিছু করতে পারেন:

int* pointer = array;
for(int i = 0; i < 25*25; i++, pointer++)
    *pointer = whatever;

স্পষ্টতই উপরেরগুলির উভয়টিই পঠনযোগ্যতার জন্য গল্ফযুক্ত নয়, তবে স্পষ্টতই পয়েন্টারগুলি ব্যবহার করা আপনাকে প্রচুর জায়গা বাঁচাতে পারে।


ভুলে যাবেন না যে আপনি সমস্ত সাদা জায়গাটি কাটাতে পারেন! (সম্পূর্ণ ভিন্ন টিপ, তবে উল্লেখ করা উচিত)
স্টোকাস্টিক

@ স্টকাস্টাস্টিক উদাহরণগুলি গল্ফ করা নয়, কেবল কৌশলটি কীভাবে ব্যবহার করা যায় তা প্রদর্শনের জন্য।
স্টান্টডুডে

6
কেন না for(int* i=array; i<array+25*25; i++)? তারপরে আপনাকে কেবল একটি ভেরিয়েবলের ট্র্যাক রাখতে হবে।
লুকাস

6

বেশ সুস্পষ্ট একটি, তবে এটি আপনি প্রচুর স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করছেন, using namespace std;কয়েকটি অক্ষর সংরক্ষণ করতে পারে।


5
আপনি যদি কেবল একটি একক নাম ব্যবহার করেন তবে তা প্রায়শই using std::name;সংক্ষিপ্ত হতে পারে।
celtschk

10
আপনি কেবল std::পাঁচ বা তার বেশি বার ব্যবহার করলে এটি অক্ষর সংরক্ষণ করে ।
nyuszika7h

6

এটা মনে রাখা দরকারী যে a[i]হিসাবে একই *(a+i)

প্রতিস্থাপন a[0]সঙ্গে *aদুই অক্ষর সঞ্চয় জন্য। এছাড়াও, a[i][0]এর সমতুল্য *a[i]এবং এটি a[0][i]সঙ্কুচিত হয় i[*a]। সুতরাং আপনি যদি 0আপনার অ্যারেতে একটি সূচি কঠোর কোডিং করে থাকেন তবে সম্ভবত আরও একটি ভাল উপায় বিদ্যমান।


5

10 টির বড় শক্তি লেখার পরিবর্তে, ই-স্বরলিপি ব্যবহার করুন । উদাহরণস্বরূপ, এর a=1000000000চেয়ে দীর্ঘ a=1e9। এটি অন্যান্য সংখ্যায় বাড়ানো যেতে পারে a=1e9+24তার চেয়ে ভাল a=1000000024


1
মনে রাখবেন যে এটি হুবহু সমতুল্য নয়, ব্যবহারের আগে পূর্ণসংখ্যার প্রকারে কাস্ট করা দরকার। উদাহরণস্বরূপ বা 1e9/xহিসাবে একই হয় না । 1000000000/xint(1e9)/x
ব্যবহারকারী 202729

5

আপনি ট্রেনারি অপারেটরটিকে ?:ট্রু-ব্লকে কোনও অভিব্যক্তি ছাড়াই ব্যবহার করতে পারেন (এটি একটি বাইট সংরক্ষণ করে)

#include <iostream>

int foo()
{
    std::cout << "Foo\n";
}

int main()
{
    1?foo():0;  // if (true) foo()
    0?:foo();   // if (!false) foo()
}

এটি এখানে দেখুন


5
এটি GNU এক্সটেনশান হিসাবে প্রদর্শিত হবে এবং সি ++ স্ট্যান্ডার্ড নয়। https://gcc.gnu.org/onlinesocs/gcc-4.4.4/gcc/Conditionals.html#
শর্তাদি

? দ foo বিন্যাস (): 0; // if (r) foo () এটি ঠিক আছে ;;;;; তবে এই আর এর জন্য?: foo (); আমি তা জানি না
রোজলুপি

5

সংক্ষিপ্ত শিরোনাম

এটি জিসিসি নির্দিষ্ট, এটি অন্য সংকলকগুলির কাছে বর্ধমানও হতে পারে।

পূর্বনির্ধারিত শিরোনাম।

জি ++ bits/stdc++.hএ পূর্বনির্ধারিত শিরোনামটি অন্যান্য সমস্ত শিরোনাম নিয়ে গঠিত। আপনার যদি import2 টি আলাদা আলাদা করে দরকার হয় তবে আপনি এটি ব্যবহার করতে পারেন।

সংক্ষিপ্ত শিরোনাম।

এটি http://en.cppreferences.com/w/cpp/header এ তালিকাভুক্ত সমস্ত শিরোনাম :

দৈর্ঘ্যের ক্রম ক্রম অনুসারে বাছাই করা।

এর মধ্যে কয়েকটি ইতিমধ্যে এর চেয়ে বেশি দীর্ঘ bits/stdc++.hএবং তাদের কারও কারও জন্য সি ++ 17 সমর্থন প্রয়োজন। কিছু অন্যান্য টিআইও জি ++ দ্বারা সমর্থিত নয় (যে কারণে আমি জানি না)। আমাদের আছে তাদের ফিল্টার করুন:

এটি হতে পারে যে তাদের মধ্যে কিছু সংক্ষিপ্ত দ্বারা প্রতিস্থাপন করা যেতে পারে। আপনার যেটিকে প্রয়োজন তা প্রতিস্থাপন করা যায় কিনা কেবল বাইনারি অনুসন্ধান করুন। নির্দিষ্টভাবে:

cstdio -> ios        (-3 bytes)
algorithm -> regex   (-4 bytes)
vector -> queue      (-1 byte)
string -> map        (-3 bytes)
bitset -> regex      (-1 byte)
numeric -> random    (-1 byte)

4

#importপরিবর্তে #includeআপনাকে আরও একটি বাইট দেয়।

এছাড়াও, #importশিরোনাম এবং শিরোলেখের মধ্যে স্পেস অক্ষর অগত্যা নয়:

#include <map>
// vs
#import<map>

এবং যদি আপনার stdlibশিরোনাম থেকে কিছু প্রয়োজন হয় তবে আপনি এসটিএল ধারক (পছন্দসই setবা map) এর পরিবর্তে কোনও শিরোনাম আমদানি করতে পারেন cstdlib


3

বুলিয়ানগুলিতে পাটিগণিত অপারেশন:

যদিও

a*=b>0?.5:-.5

বেশী ভালো

if(b>0)a*=.5;else a*=-.5;

এটি হিসাবে ভাল না

a*=(b>0)-.5

এছাড়াও, যে কোনও কিছুতে বেশি ব্যবহৃত হয় # ডিফাইন ব্যবহার করা। এটি ফাংশন ব্যবহারের চেয়ে প্রায়শই খাটো হয়, কারণ প্রকারের নামগুলি প্রয়োজনীয় নয়।

যতটা সম্ভব জিনিস একত্রিত করুন:

a+=a--;

এটার মতই

a=2*a-1;

আপনার উদাহরণগুলি সঠিক হওয়ার সময়, xল্যাভালু x++হিসাবে এবং মূল্য হিসাবে ব্যবহার করার সময় অপরিজ্ঞাত আচরণের দিকে মনোযোগ দিন। অপরিবর্তিত আচরণ এবং ক্রম পয়েন্ট
সিলিংক্যাট

হ্যাঁ সম্ভব একটি + = a--; অপরিবর্তিত আচরণ রয়েছে
রোজলুপি

3

সস্তা টেম্পলেট হিসাবে জেনেরিক ল্যাম্বডাস ব্যবহার করুন

অন্যান্য ধরণের জন্য int, এগুলি ফাংশন আর্গুমেন্ট হিসাবে ব্যবহার করা ব্যয়বহুল হতে পারে। তবে জেনেরিক ল্যাম্বডাস চালু করা হয়েছিল (সি ++ ১৪?) এবং যে কোনও ল্যাম্বডাকে একটি টেম্পলেট হিসাবে থাকতে দেয় - autoআর্গুমেন্টের ধরণের জন্য ব্যবহার করে বাইটগুলি সংরক্ষণ করা যায়। তুলনা করা:

double f(double x, double y)
[](auto x, auto y)

জেনেরিক ল্যাম্বডাস পুনরাবৃত্তিকে গ্রহণ করার জন্য খুব সুবিধাজনক - সম্ভবত সি ++ এ অ্যারের ইনপুটগুলি গ্রহণ করার সর্বোত্তম উপায় হ'ল [](auto a, auto z)যেখানে aএবং অ্যারে / ভেক্টর / তালিকা / ইত্যাদি zহিসাবে begin()এবং পাস করা হয় end()


2

টাস্কের জন্য কোড গল্ফে আমার প্রথম প্রয়াসে "পরবর্তী সংখ্যাগুলি বিয়োগ করুন" আমি ফাংশন থেকে শুরু করেছি (58 বাইট)

int f(int N, int P){int F;for(F=N;P;F-=++N,P--);return F;}

তারপরে ল্যাম্বদাতে স্থানান্তরিতকরণ এবং প্রারম্ভিককরণের মধ্য দিয়ে for(53) নিরাপদ 5 বাইট

[](int N,int P){int F=N;for(;P;F-=++N,P--);return F;}

এবং অবশেষে থেকে স্যুইচ forকরার পরে whileআমি পেয়েছি 51 বাইট:

[](int N,int P){int F=N;while(P--)F-=++N;return F;}

নিরবচ্ছিন্ন পরীক্ষার কোডটি এরকম কিছু:

#include <iostream>
int main(void)
{
    int N, P;
    std::cin >> N >> P;
    auto f = [](int N,int P)
    {
        int F = N;
        while (P--)
            F -= ++N;
        return F;
    };
    std::cout << f(N, P) << std::endl;
    return 0;
}

হালনাগাদ:

প্রকৃতপক্ষে forএকই দৈর্ঘ্যে পৌঁছাতে পারে while:

[](int N,int P){int F=N;for(;P--;F-=++N);return F;}

2

আমার মনে হয় পার্টিতে দেরী হয়েছে ...

আপনি যদি এর পরিবর্তে 0 এবং 1 এর পরিবর্তে কোনও অভিব্যক্তি -1 এবং 1 তে পরিণত করতে চান:

int x;
if (a * 10 > 5)
    x = 1;
else
    x = -1;

এটা কর:

int x = (a * 10 > 5) * 2 - 1;

এটি ব্যবহারের উপর নির্ভর করে কিছু বাইট সংরক্ষণ করতে পারে।


পরিবর্তে int x=(a*10>5)*2-1;, আপনি কি করতে পারবেন না int x=a*10>5?1:-1;, যা 1 বাইট সংক্ষিপ্ত?
গিরোবুজ

2

আপনি যদি দুটি এবং পূর্ণসংখ্যের ভেরিয়েবল a এবং b সরিয়ে নিতে চান তবে

a^=b^=a^=b;

ব্যবহার করা যেতে পারে, স্ট্যান্ডার্ড পদ্ধতির চেয়ে 5 টি অক্ষর সংরক্ষণ করা

a+=b;
b=a-b;
a-=b;

1
যে স্ট্যান্ডার্ড উপায় সম্পর্কে। ,tএর আগে তৈরি আর্টস এবং তারপরে এর t=a;a=b;b=t;চেয়ে 3 বাইট কম ছিল a+=b;b=a-b;a-=b;। তবুও, আপনার a^=b^=a^=b;তুলনায় এটি আরও খাটো, সুতরাং আমার কাছ থেকে +1। আমি সি ++ জানি না, তবে এটি কার্যকরভাবে কাজ করে । জাভা কোড-গল্ফার হিসাবে আমি দুঃখিত যে এটি সেখানে কাজ করছে বলে মনে হচ্ছে না । :(
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন হ্যাঁ, আমার সি ++ উল্লেখ করা উচিত ছিল, আমি জাভা বেশি জানি না, তবে a^=b;b^=a;a^=b;জাভাতে কাজ করছি।
joker007

1
স্পষ্টভাবে সি ++ উল্লেখ করার দরকার নেই। এই সমস্ত টিপস সি ++ এর জন্য। :) একটি জাভা বিকাশকারী হিসাবে জাভাতে অনুরূপ কিছু করা যেতে পারে তবে আমি কেবল কৌতূহলী ছিলাম, তবে দৃশ্যত তা নয়। a^=b;b^=a;a^=b;প্রকৃতপক্ষে কাজ করে তবে এটি ,t+ এর চেয়ে দীর্ঘ হয় t=a;a=b;b=t;। জাভা উল্লেখ করার জন্য দুঃখিত, যেহেতু এটি এখানে অফ-টপিক। তবে সি ++ কোডগল্ফারদের জন্য দুর্দান্ত টিপ!
কেভিন ক্রুইজসেন

2

আমদানির পরিবর্তে জিসিসি বিল্টিন ব্যবহার করুন

আপনি যদি কোনও জিসিসি সংকলক ব্যবহার করেন তবে এটি কখনও কখনও তাদের বিল্টিন ফাংশনগুলি যেমন: __builtin_putsবা ব্যবহার করতে সহায়তা করে __builtin_clz। উদাহরণ স্বরূপ,

44 বাইট:

int main(){__builtin_puts("Hello, world!");}`

50 বাইট:

#import<cstdio>
int main(){puts("Hello, world!");}

1

আপনি যদি সি ++ 11 বা আরও নতুন করছেন (যা এখন সবসময় হওয়া উচিত), autoসম্ভব হলে জটিল ধরণের জন্য ব্যবহার করুন ।

উদাহরণ: 66 এর পরিবর্তে 54 বাইট

#include<vector>
std::vector<int> f(std::vector<int> l){return l;}
#include<vector>
auto f(std::vector<int> l){return l;}

এছাড়াও, পারফরম্যান্স যেমন গুরুত্বপূর্ণ না, কিছু চ্যালেঞ্জের std::listজন্য একটি কেবল কয়েক বাইটের জন্য কম কাজ করতে পারে:

#include<list>
auto f(std::list<int> l){return l;}

1

ফাংশনগুলিতে <algorithm>প্রায়শই পাস করা প্রয়োজন a.begin(),a.end()যা আসলেই দীর্ঘ হয়, পরিবর্তে আপনি &a[0],&*end(a)যদি aহয় vectorবা 3 বাইট সংরক্ষণ করতে পারেন string

sort(a.begin(),a.end());
sort(begin(a),end(a));
sort(&a[0],&*end(a));

0

ব্যবহার করবেন না string(""), ব্যবহার করুন ""। এটি 8 বাইট সংরক্ষণ করে।


এটা ঠিক সমতুল্য নয়। উদাহরণস্বরূপ "" + 'a'হয় char* + charযখন যা পয়েন্টার উপরন্তু হয়, std::string("") + 'a'হয় std::string + char- STRING সংযুক্তকরণের। string()কাজ করবে
ব্যবহারকারী 202729
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.