লুপের জন্য সি ++ এর আগে কখনও দেখা হয়নি


164

আমি একটি সি ++ অ্যালগরিদমকে সি # তে রূপান্তর করছিলাম। আমি লুপের জন্য এটি পেরিয়ে এসেছি:

for (u = b.size(), v = b.back(); u--; v = p[v]) 
b[u] = v;

এটি সি ++ তে কোনও ত্রুটি দেয় না, তবে এটি সি # তে করে (ইনটকে বুলে রূপান্তর করতে পারে না)। আমি লুপের জন্য এটি সত্যই বুঝতে পারি না, শর্তটি কোথায়?

কেউ দয়া করে ব্যাখ্যা করতে পারেন?

পুনশ্চ. খালি পরীক্ষা করতে, কোন ভেক্টরকে একটি তালিকার সাথে মানিয়ে নিতে b.back () খ [b.Count-1] এর সাথে কি মিলবে?


35
অবস্থা কোথায়? হবে u--। আধা-কলোনগুলি forবিবৃতিটির বিভিন্ন অংশটি সীমিত করতে ব্যবহৃত হয় ।
ডেভিড হেফারনান

77
এটি বেশ স্বাভাবিক লুপ। সি # সংখ্যাগুলিকে সুস্পষ্টভাবে রূপান্তরিত করে না তাই আপনার শর্তটি পরিবর্তনের প্রয়োজন; u-- != 0;
আর মার্টিনহো ফার্নান্দেস

28
@ জেসি গুড - ভাষায় যা অনুমোদিত তা নিয়ে গুড কোডের কোনও যোগসূত্র নেই, কোডটি পড়তে কোনও বেআইনী সহকর্মীকে কতক্ষণ সময় লাগে তার সাথে এটি করতে হবে। যদি এটি কোনও ধরণের বিভ্রান্তির কারণ হয় তবে এটি আইনী হলেও সর্বাধিক সম্ভাব্য সমাধান নয়। প্রায়শই আরও ভার্জোজ সলিউশন সংশ্লেষের চেয়ে অনেক বেশি ভাল হয় এবং বেশিরভাগ সংকলক উভয় উপায়ে একই জিনিসটি সংকলন করে।
বিল কে

18
আমি আশা করি যে, কোড রূপান্তর করার পরে, আপনি ভেরিয়েবল চেয়ে ভাল নাম প্রদান b, u, v, ইত্যাদি একমাত্র কারণ তারা এই ভাবে নামে হয়েছে কারণ কেউ তাদের কোড অপাঠ্য করে স্মার্ট চেহারা চেয়েছিলেন।
ড্যান

33
@ হুবিসফট: এটি একটি সাধারণ স্ট্যাকওভারফ্লো সমস্যা। আপনি যদি একটি নির্দিষ্ট গবেষণা ডোমেইনে একটি খুব বিশদ, ভাল গবেষণামূলক এবং আকর্ষণীয় প্রশ্ন জিজ্ঞাসা করেন যা একটি কঠিন এবং আকর্ষণীয় সমস্যার সমাধানের দিকে নিয়ে যায় এবং আপনি কঠোর মূল্যবান গবেষণার পরে এই জাতীয় প্রশ্নের উত্তর দেন, আপনি কেবলমাত্র কয়েকটি পাবেন কয়েকজন দর্শনার্থী এবং এই ক্ষেত্রের কয়েকজন বিশেষজ্ঞের কাছ থেকে এক বা দুটি আপগেট। আপনি যদি দ্রুত প্রচুর উপস্থাপনা পেতে চান তবে আপনাকে এ জাতীয় প্রশ্ন জিজ্ঞাসা করতে হবে এবং উত্তর দিতে হবে। "পিএইচপি-তে আমি কীভাবে দুটি সংখ্যা যুক্ত করব", " doসি ++" এর অর্থ কী - টিউটোরিয়ালটির জন্য সন্ধানকারীদের কাছ থেকে হাজার হাজার হিট আসবে।
বনাম

উত্তর:


320

লুপটির অবস্থা forমাঝখানে - দুটি সেমিকোলনের মধ্যে ;

সি ++ এ শর্ত হিসাবে প্রায় কোনও অভিব্যক্তি রাখা ঠিক আছে: শূন্যকে যা যা মূল্যায়ন করে তার অর্থ false; নন-জিরো মানে true

আপনার ক্ষেত্রে শর্তটি হ'ল u--: আপনি যখন সি # তে রূপান্তর করবেন তখন কেবল যুক্ত করুন != 0:

for (u = b.size(), v = b.back(); u-- != 0; v = p[v]) 
    b[u] = v; //                     ^^^^ HERE

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

2
যদি আমি সঠিকভাবে মনে রাখি, এবং কমাযুক্ত অভিব্যক্তিটির ডানদিকে সর্বশেষ সুপ এক্সপ্রেসের মান রয়েছে। এটি সি থেকে আসে এবং কেবল কোনও লুপের জন্য নয়, কোনও অভিব্যক্তিতে ব্যবহার করা যেতে পারে।
জর্জিও

7
@ রোজার এটি একই লুপটি হবেনা যেহেতু আপনি সূচনার পরিবর্তে লুপের শেষে নিজেকে হ্রাস করছেন (অর্থাত্ b [u] = v এর পরিবর্তে)। আসলে আপনার u = b.size() - 1পরিবর্তে এটি শুরু করতে হবে।
দিদিয়ের এল

ফাই: আমি আপনাকে 500 কে সীমা ছাড়িয়ে এসেছি। এটি কি কোথাও দশ মিলিয়ন গ্রাহক হওয়ার এবং কিছুটা জয় করার মতো? যে কোনও ক্ষেত্রে: অনেক অভিনন্দন; সর্বদা আপনার সুনির্দিষ্ট, তীক্ষ্ণ জবাব খুঁজছেন! চোলতে থাকা; মিলিয়ন মিলিয়ন জিনিস তৈরি করার সাথে মিলিত হয় ... এই শতাব্দীর শেষদিকে।
ঘোস্টগেট

165

প্রচুর নির্ভুল উত্তর, তবে আমি মনে করি লুপের সময় সমতুল্য লেখা ভাল।

for (u = b.size(), v = b.back(); u--; v = p[v]) 
   b[u] = v;

এর সমতুল্য:

u = b.size();
v = b.back();
while(u--) {
   b[u] = v;
   v = p[v];
}

আপনি সি # তে অনুবাদ করার সময় আপনি () বিন্যাসে রিফ্যাক্টরিং বিবেচনা করতে পারেন। আমার মতে এটি পরিষ্কার, নতুন প্রোগ্রামারদের জন্য একটি ফাঁদ কম এবং সমান দক্ষ।

অন্যরা যেমন উল্লেখ করেছে - তবে আমার উত্তরটি সম্পূর্ণ করতে - এটি সি # তে কাজ করার জন্য আপনাকে এটিকে পরিবর্তন while(u--)করতে হবে while(u-- != 0)

... বা while(u-- >0)সেক্ষেত্রে আপনি নেতিবাচক শুরু করলেন। (ঠিক আছে, b.size()কখনও নেতিবাচক হবে না - তবে এমন একটি সাধারণ কেস বিবেচনা করুন যেখানে সম্ভবত অন্য কোনওটি আপনাকে সূচনা করেছিল)।

বা, এটি আরও পরিষ্কার করে তুলতে:

u = b.size();
v = b.back();
while(u>0) {
   u--;
   b[u] = v;
   v = p[v];
}

পরিশ্রুত হওয়ার চেয়ে পরিষ্কার হওয়া ভাল।


29
এই উত্তরটি কেবল খারাপ কোডটিকেই স্পষ্ট করে না তবে একটি ভাল বিকল্পও দেয়। 1 উপরে!!
polvoazul

2
অন্যদিকে, আমি while (u-- >0)ফর্মটি সম্পর্কে যত্নবান হতে চাই । যদি ব্যবধানটি গণ্ডগোল হয়ে যায় তবে আপনার "ডাউন টু শূন্য" লুপটি শেষ হতে পারে: while (u --> 0)যা প্রথম নজরে সবাইকে বিভ্রান্ত করে। ( আমি নিশ্চিত নই যে এটি বৈধ C # কিনা, তবে এটি সিতে রয়েছে, এবং আমি মনে করি এটি সি ++
তেও

9
আমি মনে করি না যে আপনার কোডটি অবশ্যই পরিষ্কার। forপরিবর্তে এর বিন্দুটি whileহুবহু আপনি একটি বিবৃতিতে সূচনা এবং বৃদ্ধি / হ্রাস রেখেছেন, এবং এটি কোডটি বোঝার জন্য অগত্যা জটিল করে তোলে না। অন্যথায়, আমরা মোটেও ব্যবহার forকরা উচিত নয় ।
ম্যাসিফিল

1
যতটা সম্ভব কম কোড পুনরায় লেখার জন্য এটিও গুরুত্বপূর্ণ। (সর্বোপরি লুপটি পরিবর্তিত হতে পারে)) আপনি দুটি আলাদা জায়গায় "u--" রেখেছেন এবং লুপটি সত্যিই পরিষ্কার নয় (আমি দেখতে পাচ্ছি লুপটি এক নজরে কী করে; আমাকে স্ক্যান করতে হবে) একাধিক লাইন সহ)। পরিশ্রমী হওয়ার উপকারও রয়েছে। এগুলিকে হ্রাস করবেন না। তবুও, এটি কীভাবে লেখা যেতে পারে তার একটি ভাল উদাহরণ। সি ++ (অথবা এমনকি কিছুটা হলেও) বিবৃতি দেওয়ার জন্য অভ্যস্ত না এমন কারও পক্ষে এটি বোঝা সহজ করে তোলে।
নোটকায়ন

2
@ ইজকাটা: এটি কখনই অপারেটর নয়, এটি একটি --টোকেন হিসাবে পার্স করা হয়েছে তার পরে একটি >টোকেন। দুটি পৃথক অপারেটর। একটি "ডাউন টু শূন্য" লুপ হ্রাস-পরবর্তী এবং বৃহত্তর-এর সামান্য সংশ্লেষ। সি ++ অপারেটর ওভারলোডিং নতুন অপারেটর তৈরি করে না, এটি কেবল বিদ্যমানগুলিকে পুনরুদ্ধার করে।
বেন ভয়েগট

66

শর্তটি হ'ল u--;, কারণ এটি নির্দেশের জন্য দ্বিতীয় অবস্থানে রয়েছে ।

মানটির মান u--;0 থেকে আলাদা হলে এটি ব্যাখ্যা করা হবে true(অর্থাত্, বুলিয়ান মানকে অন্তর্ভুক্ত true)। পরিবর্তে, যদি এর মান 0 হয় তবে এটি নিক্ষিপ্ত হবে false

এটি খুব খারাপ কোড

আপডেট: আমি এই ব্লগ পোস্টে "for" লুপগুলি লেখার বিষয়ে আলোচনা করেছি । এর সুপারিশগুলি নিম্নোক্ত অনুচ্ছেদে সংক্ষিপ্ত করা যেতে পারে:

ল ফর এ লুপ একটি ব্যবহারিক, পঠনযোগ্য (একবার আপনি এর সাথে অভ্যস্ত হয়ে ওঠেন) এবং ক্ষতিকারক নির্মাণ, তবে আপনার এটি ভাল ব্যবহার করা দরকার। এটি অস্বাভাবিক সিনট্যাক্সের কারণে এটি খুব কল্পনাপ্রসূত উপায়ে ব্যবহার করা ভাল ধারণা নয়।

লুপের জন্য সমস্ত অংশ সংক্ষিপ্ত এবং পঠনযোগ্য হওয়া উচিত। পরিবর্তনশীল নামগুলি এটি সহজেই বোঝার জন্য চয়ন করা উচিত।

এই উদাহরণটি স্পষ্টভাবে এই পুনঃসংশোধনগুলি লঙ্ঘন করে।


3
অথবা এটি আপনার == 0 এ থামবে সম্ভবত ...?
থমাস

2
না; সি ++ তে 0 থেকে মিথ্যে রূপান্তরিত করে ইনট থেকে বুলে রূপান্তরিত হয় licit লুপটি সমাপ্ত হবে যখন u-- == 0. সি # তে, এমন কোনও অন্তর্নিহিত রূপান্তর নেই যাতে আপনাকে স্পষ্টভাবে u-- == 0. বলতে হবে সম্পাদনা: এটি আপনার প্রথম মন্তব্যের প্রতিক্রিয়া হিসাবে।
ক্রিস

48
এটি ভয়ানক কোড, একটি খুব সাধারণ কারণে; আপনি যখন এটি পড়েন তখন আপনি সহজেই এটি উপলব্ধি করতে পারেন না। এটি "চালাক", একটি "হ্যাক"; কোডিং স্ট্রাকচারের সংমিশ্রণ এবং তারা কীভাবে পর্দার আড়ালে কাজ করে তার জ্ঞানটি এমন একটি কাঠামো তৈরি করে যাতে কাজটি করে কিন্তু বোঝার বিষয়টি অস্বীকার করে, কারণ এটি ভাষা লেখকরা যে কল্পনা করেছিলেন এমন আকারে নয় এবং এটি বেশিরভাগ ক্ষেত্রেই জানানো হয়েছিল ভাষা ব্যবহারকারী।
কিথস

4
দুর্দান্ত উত্তর। আমি এটি +1 করতাম ... না হলে "এটি খুব খারাপ কোড।" বিবৃতি;)
স্যান্ডম্যান 4

14
আমি বুঝিনা কেন এত লোক ভাবতে মনে হচ্ছে না u-- সত্যিই কেবল (হারিয়েছে সি অন্তর্নিহিত ++,) উপর ভিত্তি করে খারাপ কোড ! = 0 । অবশ্যই কোড সহ যে কেউ কাজ করছেন তা পুরোপুরি অবগত হবে যে 0 = মিথ্যা, প্রতিটি অন্যান্য মান = সত্য । সেখানে প্রাক / পোস্ট-বৃদ্ধিশীল সংক্রান্ত বিভ্রান্তির জন্য অনেক বেশী সুযোগ নেই তোমার দর্শন লগ করা , নাকি জনগণ সম্ভবত যে অভিমানী তোমার দর্শন লগ করা = b.size () হবে সবসময় সামনে চালানো বনাম = b.back () (আমার বোঝার সঞ্চালনের ক্রম সেখানে undefined হয়, তবে আমি সংশোধন করতে দাঁড়িয়েছি)।
FumbleFingers

23

এটি আপনার লুপের সি # ফর্ম হবে।

// back fetches the last element of vector in c++.
for (u = b.size(), v = b.back(); (u--) != 0; v = p[v]) 
{      
  b[u] = v;      
}

আকার () এবং পিছনে () এর জন্য কেবল সমমানের প্রতিস্থাপন করুন।

এটি যা করে তা তালিকার বিপরীত হয় এবং অ্যারেতে সঞ্চয় করে। তবে সি # তে আমরা এর জন্য সরাসরি সিস্টেম সংজ্ঞায়িত ফাংশন রাখি। সুতরাং আপনার এই লুপটিও লেখার দরকার নেই।

b = b.Reverse().ToArray();

1
গ্রহণ করে v = b.back();, জন্য intializer আপনি শুধু এটার কাজের ধরনে পরিবর্তন না করে বাইরে থেকে v = p[v]দ্বারা উপেক্ষা করা হয়
জোয়াও Portela

v = p [v] এর চূড়ান্ত ফলাফলের উপর কোনও প্রভাব ফেলবে না কারণ এই লাইনটি শেষের দিকে কার্যকর হবে। এবং এর পরে ভিটি লুপে উল্লেখ করা হয়নি। লুপটি কীভাবে সি ++ থেকে সি # তে রূপান্তরিত হয় তা দেখানোর জন্য এই লাইনটি রয়েছে।
নরেন্দ্র

1
সি ++ কোডে v = b.back();পুনরাবৃত্তি শুরুর আগে একবার v = p[v]সম্পাদন করা হয়েছিল এবং প্রতিটি পুনরুক্তির শুরুতে কার্যকর করা হয়েছিল। যে সি # সংস্করণে v = p[v]এখনও প্রতিটি পুনরাবৃত্তির শুরুতে মৃত্যুদন্ড কার্যকর করা হয় তবে পরবর্তী নির্দেশের v = b.back();মান পরিবর্তন করে ঠিক পরে এটি কার্যকর করা হয় । (সম্ভবত আপনি এটি পড়ার পরে প্রশ্নটি সম্পাদিত হয়েছিল)vb[u] = v;
Jooo Portela

5
@Rain বিষয় v = b.back()। আপনি এটি প্রতিটি প্রথম লুপের পরিবর্তে প্রতিটি লুপ পুনরাবৃত্তিতে সম্পাদন করেছেন - আমরা জানি না কী back()করে (কোনও পার্শ্ব-প্রতিক্রিয়া রয়েছে কি? এটির অভ্যন্তরীণ উপস্থাপনা পরিবর্তন হয় b?), সুতরাং এই লুপটি এর সাথে সমান নয় প্রশ্নটি.
ইজকাটা

1
@ রাইন হুবহু, এটিকে নিজেই নিবিড়ভাবে দেখুন। আরম্ভের পদক্ষেপ, শুধুমাত্র একবার সামনে লুপ শুরু ঘটে না শুরুতে প্রতি পুনরাবৃত্তির । আপনার কোডটি যদি v = b.back()লুপের বাইরে সরানো হয় তবে এটি সঠিক হবে। (এছাড়াও, যদি আপনি কারও প্রতিক্রিয়া জানাতে চাইছেন তবে @তাদের নামের সামনে ব্যবহার করুন , যাতে আমরা একটি বিজ্ঞপ্তি
পাই


14

শর্তটি এর ফলাফল u--, যা uহ্রাস হওয়ার আগে তার মান ।

সি এবং C ++, একটি int হল পরোক্ষভাবে একটি করে bool, করতে পরিবর্তনীয় != 0তুলনা (0 false, অন্য সবকিছু true)।

b.back()একটি ধারক মধ্যে শেষ উপাদান, যা হয় b[b.size() - 1], যখন size() != 0


11

সি-তে সমস্ত কিছুই শূন্য নয় এমন true"বুলিয়ান" প্রসঙ্গে যেমন লুপের শেষ শর্ত বা শর্তসাপেক্ষ বিবৃতি। ইন সি # আপনি যে চেক স্পষ্ট করতে হবে: u-- != 0


এটি ওপি-র প্রশ্ন নয়। তিনি টার্মিনাল অবস্থার মূল্যায়ন সম্পর্কে জিজ্ঞাসা করছেন (অর্থাত্ এই ক্ষেত্রে 'u--')।
অ্যাপলপি

6

অন্যদের দ্বারা যেমন বলা হয়েছে, সি ++ এর বুলিয়ানতে অন্তর্নিহিত ingালাই থাকার অর্থ শর্তসাপেক্ষ u--, যা মানটি শূন্য না হলে সত্য হবে।

এটি যুক্তিযুক্ত, এটি "শর্তসাপেক্ষ কোথায়" জিজ্ঞাসা করার ক্ষেত্রে আপনার একটি ভুল ধারণা রয়েছে। সি ++ এবং সি # (এবং অন্যান্য অনুরূপ বাক্য গঠন) উভয় ক্ষেত্রেই আপনার খালি শর্তযুক্ত থাকতে পারে। এই ক্ষেত্রে এটি সবসময় সত্য মূল্যায়ণ তাই লুপ চিরকাল অব্যাহত, অথবা অন্য কোনো শর্ত প্রস্থানের পর্যন্ত এটি (মাধ্যমে return, breakঅথবা throw)।

for(int i = 0; ; ++i)
  doThisForever(i);

প্রকৃতপক্ষে, বিবৃতিটির কোনও অংশ বাদ দেওয়া যেতে পারে, সেক্ষেত্রে এটি কেবল সম্পাদন করা হয়নি।

সাধারণভাবে, for(A; B; C){D}বা for(A; B; C)D;হয়:

{A}
loopBack:
if(!(B))
  goto escapeLoop;
{D}
{C}
goto loopBack;
escapeLoop:

এ, বি, সি বা ডি এর যে কোনও একটি বা তার বেশি রেখে দেওয়া যেতে পারে।

এর ফলস্বরূপ, for(;;) অসীম লুপগুলির জন্য কিছু পক্ষপাতী । আমি কারণ while(true)এটি বেশি জনপ্রিয় হওয়ার পরেও আমি পড়েছি "সত্য সত্য হওয়া পর্যন্ত" যা আমার পড়াটিকে for(;;) "চিরকালের জন্য" হিসাবে তুলনা করে কিছুটা সাশ্রয়ী মনে হয় ।

এটি স্বাদের বিষয়, তবে যেহেতু আমি বিশ্বের একমাত্র ব্যক্তি নই for(;;)যার অর্থ এটি কী তা বোঝার জন্য এটি পছন্দ করা উচিত।


4

সমস্ত উত্তর সঠিক: -

লুপের জন্য বিভিন্নভাবে ব্যবহার করা যেতে পারে:

Single Statement inside For Loop
Multiple Statements inside For Loop
No Statement inside For Loop
Semicolon at the end of For Loop
Multiple Initialization Statement inside For
Missing Initialization in For Loop
Missing Increment/Decrement Statement
Infinite For Loop
Condition with no Conditional Operator.

4
for (u = b.size(), v = b.back(); u--; v = p[v]) 
   b[u] = v;

উপরের কোড ইন, uএবং vসঙ্গে সক্রিয়া করা হয় b.size()এবং b.back()

প্রতিটি সময় শর্ত পরীক্ষা করা হয়, এটা খুব অর্থাত হ্রাস বিবৃতি executes u--

forলুপ থেকে প্রস্থান কবে আসবে uহয়ে যাবে 0


3

সি # তে থাকা ত্রুটিটি সন্দেহটি পরিষ্কার করে দেয়। জন্য লুপ অনুসন্ধান

মিথ্যা

শর্ত অবসান। এবং যেমনটি আমরা জানি,

(BOOL) মিথ্যা = (অবধি) 0

তবে সি # সি ++ এর মতো বিপরীতে এটি নিজে প্রক্রিয়া করতে পারে না। সুতরাং আপনি যে শর্তটি অনুসন্ধান করছেন তা হ'ল

u--

তবে আপনাকে C # তে স্পষ্ট করে শর্ত দিতে হবে

u--! = 0

অথবা

u--> 0

তবে এখনও এই জাতীয় কোডিং অনুশীলন এড়াতে চেষ্টা করুন। দ্য

লুপ করার সময়

উত্তরে উপরে বর্ণিত হ'ল আপনার একটি সর্বাধিক সরলীকৃত সংস্করণ

জন্য-লুপ।


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

3

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

for (<initialization> ; <condition>; <increment>)
{
    <code...>
}

আরম্ভের কোডটি একবার চালানো হয়। তারপরে শর্তটি প্রতিটি লুপের আগে পরীক্ষা করা হয় এবং শেষ পর্যন্ত বৃদ্ধিটি প্রতিটি লুপের পরে ডাকা হয় called সুতরাং আপনার উদাহরণে আপনি শর্তটি দেখতে পাবেনu--

u--সি তে শর্ত হিসাবে কেন কাজ করে না সি # তে? কারণ সি স্পষ্টতই অনেকগুলি জিনিসকে খুব বেশি পরিমাণে রূপান্তরিত করে এবং এটি সমস্যার কারণ হতে পারে। একটি সংখ্যার জন্য যা শূন্য নয় তা সত্য এবং শূন্য মিথ্যা। সুতরাং এটি বি.সাইজ () - 1 থেকে 0 থেকে নীচে গণনা করা হবে শর্তে পার্শ্ব-প্রতিক্রিয়াটি কিছুটা বিরক্তিকর এবং এটি লুপের বর্ধিত অংশে রাখা ভাল, যদিও প্রচুর সি হবে of কোড এটি করে। আমি যদি এটি লিখতে থাকি তবে আমি আরও এটির মতো করতাম:

for (u = b.size() - 1, v = b.back(); u>=0; --u) 
{
    b[u] = v;
    v = p[v]
}

এটির কারণটি আমার পক্ষে অন্তত এটি পরিষ্কার it's লুপের প্রতিটি অংশ এটি কাজ করে এবং অন্য কিছুই না। মূল কোডে শর্তটি চলকটি পরিবর্তন করছিল। ইনক্রিমেন্ট অংশ এমন কিছু করছিল যা কোড ব্লকে থাকা উচিত ইত্যাদি etc.

কমা অপারেটর আপনাকে লুপের জন্য ফেলে দিচ্ছে। সি তে এমন কিছু x=1,y=2দেখায় যেমন একটি বিবৃতি যেমন সংকলকটি উদ্বিগ্ন হয় এবং প্রারম্ভিককরণের কোডের সাথে ফিট করে। এটি কেবল প্রতিটি অংশের মূল্যায়ন করে এবং শেষেরটির মান দেয়। উদাহরণস্বরূপ:

std::cout << "(1,2)=" << (1,2) << std::endl;

2 প্রিন্ট আউট হবে।


আপনার পুনর্লিখনের সমস্যাটি হ'ল যদি b.size () স্বাক্ষরযুক্ত না হয় তবে এটি খুব দীর্ঘ সময়ের জন্য পুনরাবৃত্তি হবে। (এছাড়াও, আপনি একটি সেমিকোলন অনুপস্থিত)) তবে কমপক্ষে আপনি "'ডিক এবং জেন' ভাল ইংরেজি" পদ্ধতির গ্রহণ করেন নি যে অন্যান্য উত্তর এবং মন্তব্যগুলির মধ্যে এমন অনেকগুলি রয়েছে যা কেবলমাত্র সহজ নিওফাইটস এবং অন্যান্য দক্ষ নয় এমন প্রোগ্রামারদের দ্বারা পড়তে।
জিম বাল্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.