কিভাবে C ++ ভেক্টর ব্যবহার করবেন

How Use C Vector



ভূমিকা

একটি অ্যারে ধারাবাহিক মেমরি অবস্থানে একই বস্তুর প্রকারের একটি সিরিজ। একটি অ্যারে দৈর্ঘ্যে আকরিক হ্রাস বাড়াতে পারে না। একটি ভেক্টর একটি অ্যারের মত, কিন্তু এর দৈর্ঘ্য বাড়ানো বা কমানো যায়। একটি ভেক্টর, তাই, একটি অ্যারের চেয়ে অনেক বেশি অপারেশন আছে।

C ++ এর অনেক লাইব্রেরি আছে, যার সবগুলোই C ++ স্ট্যান্ডার্ড লাইব্রেরি গঠন করে। এই লাইব্রেরির মধ্যে একটি হল কন্টেইনার লাইব্রেরি। একটি ধারক বস্তুর একটি সংগ্রহ, এবং সংগ্রহে কিছু অপারেশন করা যেতে পারে। C ++ পাত্রে দুটি সেট করা যেতে পারে: ক্রম ধারক এবং সহযোগী পাত্রে। সিকোয়েন্স পাত্রে ভেক্টর, অ্যারে (একই অ্যারে আগে আলোচনা করা হয়নি), ডেক, ফরোয়ার্ড_লিস্ট এবং তালিকা। এগুলি বিভিন্ন সংগ্রহ (অ্যারের মতো ডেটা স্ট্রাকচার), এবং প্রতিটি আলাদা ট্রেড অফ অফার করে।







যেকোনো প্রোগ্রামারকে জানতে হবে কিভাবে একটি ভেক্টর, একটি অ্যারে, একটি ডেক, একটি ফরোয়ার্ড_লিস্ট বা একটি তালিকা ব্যবহার করতে হবে। যখন একজন প্রোগ্রামারের এমন একটি কাঠামোর প্রয়োজন হয় যার জন্য সাধারণ অ্যারের সঙ্গে যুক্ত অপারেশনের চেয়ে বেশি অপারেশন প্রয়োজন হয়, তখন সাধারণ অ্যারে ব্যবহার করা উচিত নয়।



যদি টাস্ক ক্রম মাঝখানে ঘন ঘন সন্নিবেশ এবং মুছে ফেলা হয়, তাহলে একটি তালিকা বা forward_list ব্যবহার করা উচিত। যদি টাস্কটি ক্রমের শুরুতে বা শেষে ঘন ঘন সন্নিবেশ এবং মুছে ফেলা হয়, তবে একটি ডেক ব্যবহার করা উচিত। এই ধরনের অপারেশনের প্রয়োজন না হলে একটি ভেক্টর ব্যবহার করা উচিত।



এই নিবন্ধটি আপনাকে দেখায় কিভাবে C ++ ভেক্টর ব্যবহার করতে হয়। এই নিবন্ধটি বোঝার জন্য আপনার C ++ পয়েন্টার, রেফারেন্স এবং অ্যারের কিছু জ্ঞানের প্রয়োজন হবে।





ক্লাস এবং অবজেক্টস

একটি শ্রেণী হল ভেরিয়েবল এবং ফাংশনগুলির একটি সেট যা একসাথে কাজ করে, যেখানে ভেরিয়েবলের মান নির্ধারিত হয় না। যখন ভেরিয়েবলে মান নির্ধারণ করা হয়, তখন একটি শ্রেণী একটি বস্তুতে পরিণত হয়। একই শ্রেণীতে প্রদত্ত বিভিন্ন মান বিভিন্ন বস্তুর ফলে; অর্থাৎ, বিভিন্ন বস্তু একই শ্রেণীর হতে পারে কিন্তু বিভিন্ন মান আছে। একটি শ্রেণী থেকে একটি বস্তু তৈরি করা বস্তুকে তাত্ক্ষণিক বলা হয়।

ভেক্টর শব্দটি একটি শ্রেণীকে বর্ণনা করে। ভেক্টর থেকে তৈরি বস্তুর একটি নাম থাকে যা প্রোগ্রামার দ্বারা নির্বাচিত হয়।



একটি ফাংশন যা একটি শ্রেণীর অন্তর্গত একটি ক্লাস থেকে একটি বস্তু তাত্ক্ষণিকভাবে প্রয়োজন। C ++ এ, সেই ফাংশনটির ক্লাসের নামের মতো নাম রয়েছে। ক্লাস থেকে তৈরি করা বিভিন্ন বস্তুর (তাত্ক্ষণিক) প্রোগ্রামার দ্বারা তাদের প্রত্যেককে আলাদা আলাদা নাম দেওয়া হয়।

একটি শ্রেণী থেকে একটি বস্তু তৈরি করা মানে বস্তু তৈরি করা; এর অর্থ বস্তুটিকে তাত্ক্ষণিকভাবে বোঝানো।

ভেক্টর ক্লাস

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

#অন্তর্ভুক্ত

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

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত

একটি ভেক্টর ইনস্ট্যান্টিং

intfoo[10];

উপরে foo নাম এবং এলিমেন্টের সংখ্যা সহ একটি অ্যারের ঘোষণা। এটি পূর্ণসংখ্যার একটি অ্যারে। একটি ভেক্টরের ঘোষণা অনুরূপ। একটি ভেক্টরের জন্য, উপাদানগুলির সংখ্যা optionচ্ছিক, যেহেতু ভেক্টরের দৈর্ঘ্য বৃদ্ধি বা হ্রাস করতে পারে।

প্রোগ্রামের এই সময়ে, ভেক্টর ক্লাস ইতিমধ্যে লাইব্রেরিতে সংজ্ঞায়িত করা হয়েছে, এবং হেডার অন্তর্ভুক্ত করা হয়েছে। নিম্নরূপ ভেক্টর ইনস্ট্যান্ট করা যেতে পারে:

ঘন্টার::ভেক্টর <int>vtr(8);

এখানে, ভেক্টর হল বিশেষ কনস্ট্রাক্টর ফাংশনের। ভেক্টর যে ধরনের ডেটা ধারণ করবে তা হল কোণ বন্ধনীতে int। ভিটিআর শব্দটি ভেক্টরের জন্য প্রোগ্রামার কর্তৃক নির্বাচিত নাম। পরিশেষে, 8, বন্ধনীতে, ভেক্টরের থাকবে পূর্ণসংখ্যার অস্থায়ী সংখ্যা।

Std শব্দটি স্ট্যান্ডার্ড নেমস্পেস। এই পরিপ্রেক্ষিতে এই শব্দটি অবশ্যই একটি ডাবল কোলন অনুসরণ করতে হবে। যে কেউ তাদের নিজস্ব ভেক্টর ক্লাস লাইব্রেরি লিখতে এবং এটি ব্যবহার করতে পারেন। যাইহোক, C ++ এর ইতিমধ্যে ভেক্টর সহ প্রমিত নাম সহ একটি আদর্শ লাইব্রেরি রয়েছে। একটি স্ট্যান্ডার্ড নাম ব্যবহার করার জন্য, স্ট্যান্ডার্ড নামটি std :: এর আগে থাকতে হবে। স্ট্যান্ডার্ড নামের জন্য প্রোগ্রামে প্রতিবার টাইপ করা এড়াতে, প্রোগ্রাম ফাইলটি নিম্নরূপ শুরু হতে পারে:

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
নামস্থান std ব্যবহার করে;

একটি ফাংশন ওভারলোডিং

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

একটি ভেক্টর নির্মাণ

একটি ভেক্টর গঠন করা মানে একটি ভেক্টর বস্তু তাত্ক্ষণিকভাবে তৈরি করা (তৈরি করা)। কনস্ট্রাক্টর ফাংশন নিম্নরূপ ওভারলোড করা হয়:

ভেক্টর নাম

এটি শূন্য দৈর্ঘ্যের একটি ভেক্টর তৈরি করে এবং T টাইপ করে।

ভেক্টর<ভাসা>vtr;

ভেক্টর নাম (n)

এটি টি টাইপের এন উপাদানগুলির সাথে একটি ভেক্টর তৈরি করে।

ভেক্টর<ভাসা>vtr(4);

ভেক্টরের নাম (n, t)

এটি n উপাদানের একটি ভেক্টর তৈরি করে যা মান t এ শুরু হয়। নিম্নলিখিত বিবৃতি 5 টি উপাদানের একটি ভেক্টর তৈরি করে, যেখানে প্রতিটি উপাদানের মান 3.4 হয়:

ভেক্টর<ভাসা>vtr(5, 3.4);

সূচনা সঙ্গে নির্মাণ

একটি ভেক্টর তৈরি করা যেতে পারে (তৈরি) এবং একই সাথে শুরু করা যেতে পারে, নিম্নলিখিত দুটি উপায়ের মধ্যে একটিতে:

ভেক্টর<ভাসা>vtr= {1.1, 2.2, 3.3, 4.4};

অথবা

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};

লক্ষ্য করুন যে বস্তুর নামের ঠিক পরে কোন বন্ধনী নেই। বস্তুর নামের ঠিক পরে ব্যবহৃত প্যারেন্থেসিসের সূচনাকারী তালিকা থাকা উচিত, নিম্নরূপ:

ভেক্টর<ভাসা>vtr({1.1, 2.2, 3.3, 4.4});

একটি ভেক্টর তৈরি করা যেতে পারে এবং পরে সূচনাকারী তালিকা দিয়ে শুরু করা যেতে পারে। এই ক্ষেত্রে, বন্ধনী ব্যবহার করা হবে না:

ভেক্টর<ভাসা>vtr;
vtr= {1.1, 2.2, 3.3, 4.4};

ভেক্টর V2 (V1)

এটি একটি অনুলিপি নির্মাতা। এটি ভেক্টর V1 এর একটি অনুলিপি হিসাবে একটি ভেক্টর V2 তৈরি করে। নিচের কোডটি এটিকে ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr1(5, 3.4);
ভেক্টর<ভাসা>vtr2(vtr1);

নির্মাণের সময় একটি ভেক্টর নিয়োগ

নির্মাণের সময়, একটি খালি ভেক্টর তৈরি করা যেতে পারে যখন অন্যটি এটিকে নিযুক্ত করা হয়, নিম্নরূপ:

ভেক্টর<ভাসা>vtr1{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা>vtr2=vtr1;

দ্বিতীয় বিবৃতিটি এর সমতুল্য:

ভেক্টর<ভাসা>vtr2= {1.1, 2.2, 3.3, 4.4};

const ভেক্টর

একটি কনস্ট ভেক্টর এমন একটি ভেক্টর যার উপাদান পরিবর্তন করা যায় না। এই ভেক্টরের মানগুলি কেবল পঠনযোগ্য। যখন তৈরি করা হয়, ভেক্টর নিম্নরূপ প্রদর্শিত হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};

এই ভেক্টর প্রকারে, কোন উপাদান যোগ বা অপসারণ করা যাবে না। তাছাড়া, কোন মান পরিবর্তন করা যাবে না।

Iterator সঙ্গে নির্মাণ

একটি টেমপ্লেট একটি ডেটা টাইপের জন্য একটি সাধারণ উপস্থাপনা প্রদান করে। একটি পুনরাবৃত্তকারী একটি ধারক মানগুলির মাধ্যমে স্ক্যানিংয়ের একটি সাধারণ উপস্থাপনা প্রদান করে। একটি পুনরাবৃত্তির সাথে একটি ভেক্টর তৈরির সিনট্যাক্স নিম্নরূপ:

টেমপ্লেট<ক্লাস InputIterator>
ভেক্টর(প্রথমে InputIterator,InputIterator শেষ,constবরাদ্দকারী& =বরাদ্দকারী());

এটি নির্দিষ্ট বরাদ্দকারী ব্যবহার করে [প্রথম, শেষ) পরিসরের জন্য একটি ভেক্টর তৈরি করে, যা এই নিবন্ধে পরে আলোচনা করা হবে।

একটি ভেক্টর ধ্বংস করা

একটি ভেক্টর ধ্বংস করার জন্য, এটিকে সুযোগের বাইরে যেতে দিন এবং ধ্বংস স্বয়ংক্রিয়ভাবে পরিচালনা করা হয়।

ভেক্টর ক্যাপাসিটি

size_type ক্ষমতা () const noexcept

ভেক্টর পুনরায় বরাদ্দকরণ ছাড়াই ধারণ করতে পারে এমন উপাদানগুলির মোট সংখ্যা ক্ষমতা সদস্য ফাংশন দ্বারা ফেরত দেওয়া হয়। এর জন্য একটি কোড সেগমেন্ট নিম্নরূপ:

ভেক্টর<ভাসা>vtr(4);
intএকের উপর=vtrক্ষমতা();
খরচ<<একের উপর<< 'n';

আউটপুট 4।

রিজার্ভ (এন)

স্মৃতি স্থান সবসময় অবাধে পাওয়া যায় না। অতিরিক্ত জায়গা অগ্রিম সংরক্ষণ করা যেতে পারে। নিম্নলিখিত কোড বিভাগ বিবেচনা করুন:

ভেক্টর<ভাসা>vtr(4);
vtrসংচিতি(6);
খরচ<<vtrক্ষমতা() << 'n';

আউটপুট হল 6. সুতরাং, অতিরিক্ত স্থান সংরক্ষিত হল 6 - 4 = 2 উপাদান। ফাংশন শূন্য ফিরে আসে।

size () const noexcept

এটি ভেক্টরের উপাদানগুলির সংখ্যা প্রদান করে। নিম্নলিখিত কোড এই ফাংশন ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr(4);
ভাসাগুলি=vtrআকার();
খরচ<<গুলি<< 'n';

আউটপুট 4।

shrink_to_fit ()

রিজার্ভ () ফাংশন সহ একটি ভেক্টরকে অতিরিক্ত ক্ষমতা দেওয়ার পরে, ভেক্টরটিকে তার আসল আকারের সাথে মানানসই আকারে আকার দেওয়া যেতে পারে। নিচের কোডটি এটিকে ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr(4);
vtrসংচিতি(6);
vtrসঙ্কুচিত করা_();
intগুলি=vtrআকার();
খরচ<<গুলি<< 'n';

আউটপুট 4 এবং 6 নয়। ফাংশনটি শূন্য হয়ে যায়।

আকার পরিবর্তন করুন (sz), আকার পরিবর্তন করুন (sz, c)

এটি ভেক্টরের আকার পরিবর্তন করে। যদি নতুন আকারটি পুরানো আকারের চেয়ে ছোট হয়, তবে শেষের দিকে উপাদানগুলি মুছে ফেলা হয়। যদি নতুন আকার দীর্ঘ হয়, তবে শেষের দিকে কিছু ডিফল্ট মান যোগ করা হয়। একটি নির্দিষ্ট মান যোগ করার জন্য, দুটি আর্গুমেন্ট সহ resize () ফাংশনটি ব্যবহার করুন। নিম্নলিখিত কোড সেগমেন্ট এই দুটি ফাংশন ব্যবহার ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr1{1.1, 2.2, 3.3, 4.4};
vtr1।আকার পরিবর্তন(2);
খরচ<< 'Vtr1 এর নতুন আকার:' <<vtr1।আকার() << 'n';
ভেক্টর<ভাসা>vtr2{1.1, 2.2};
vtr2।আকার পরিবর্তন(4, 8.8);
খরচ<< 'vtr2:'<<vtr2[0] <<''<<vtr2[] <<'
'
<<vtr2[2] <<''<<vtr2[3] << 'n';

আউটপুট নিম্নরূপ:

Vtr1: 2 এর নতুন আকার
vtr2: 1.1 2.2 8.8 8.8

ফাংশন শূন্য ফিরে।

খালি () const noexcept

ভেক্টরের কোন উপাদান না থাকলে এই ফাংশনটি সত্যের জন্য 1 এবং ভেক্টর খালি থাকলে 0 মিথ্যা দেয়। যদি কোনো ভেক্টরের একটি নির্দিষ্ট ধরনের তথ্যের জন্য locations টি অবস্থান থাকে, যেমন ফ্লোট, কোন ভাসমান মান ছাড়াই, তাহলে সেই ভেক্টরটি খালি নয়। নিচের কোডটি এটিকে ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr;
খরচ<<vtrখালি() << 'n';
ভেক্টর<ভাসা>vt(4);
খরচ<<যাতেখালি() << 'n';

ভেক্টর<ভাসা>v(4,3.5);
খরচ<<v।খালি() << 'n';

আউটপুট নিম্নরূপ:


0
0

ভেক্টর এলিমেন্ট অ্যাক্সেস

একটি ভেক্টর একটি অ্যারের মত সাব-স্ক্রিপ্ট (ইনডেক্সড) হতে পারে। সূচক গণনা শুরু হয় শূন্য থেকে।

ভেক্টর নাম [i]

অপারেশন ভেক্টরনেম [i] i তে উপাদানটির একটি রেফারেন্স প্রদান করেভেক্টরের সূচক। উপরের ভেক্টরের জন্য নিচের কোডটি 3.3 আউটপুট করে:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtr[2];
খরচ<<fl<< 'n';

vectorName [i] const

যখন ভেক্টর একটি ধ্রুবক ভেক্টর হয় তখন অপারেশন vectorName [i] const ভেক্টর নেম [i] এর পরিবর্তে কার্যকর করা হয়। এই অপারেশন নিম্নলিখিত কোড ব্যবহার করা হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtr[2];
খরচ<<fl<< 'n';

অভিব্যক্তি i- এর একটি ধ্রুবক রেফারেন্স প্রদান করেভেক্টরের উপাদান।

সাবস্ক্রিপ্ট সহ একটি মান নির্ধারণ করা

একটি মান একটি অ-ধ্রুবক ভেক্টরকে দেওয়া যেতে পারে, নিম্নরূপ:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
vtr[2] = 8.8;
খরচ<<vtr[2] << 'n';

আউটপুট 8.8।

vectorName.at (i)

vectorName.at (i) vectorName [i] এর মত, কিন্তু vectorName.at (i) আরো নির্ভরযোগ্য। নিম্নলিখিত কোড দেখায় কিভাবে এই ভেক্টর ব্যবহার করা উচিত:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtr(2);
খরচ<<fl<< 'n';
()একজন ভেক্টর সদস্যফাংশন

vectorName.at (i) const

vectorName.at (i) const হল vectorName [i] const এর মত, কিন্তু vectorName.at (i) const আরো নির্ভরযোগ্য। vectorName.at (i) const এর পরিবর্তে vectorName.at (i) চালানো হয় যখন ভেক্টর একটি ধ্রুবক ভেক্টর হয়। এই ভেক্টর নিম্নলিখিত কোড ব্যবহার করা হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtr(2);
খরচ<<fl<< 'n';
() constএকজন ভেক্টর সদস্যফাংশন

At () ফাংশনের সাথে একটি মান নির্ধারণ করা

একটি মান অ-ধ্রুবক ভেক্টরকে at () ফাংশনের সাথে নিচের হিসাবে দেওয়া যেতে পারে:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
vtr(2) = 8.8;
খরচ<<vtr[2] << 'n';

আউটপুট 8.8।

সাব-স্ক্রিপ্টিং-এ সমস্যা

সাব-স্ক্রিপ্টিং (ইনডেক্সিং) এর সমস্যা হল যে যদি সূচকটি সীমার বাইরে থাকে, শূন্য ফিরে আসতে পারে বা রান-টাইমে একটি ত্রুটি জারি করা যেতে পারে।

সামনে ()

এটি উপাদানটি না সরিয়ে ভেক্টরের প্রথম উপাদানটির একটি রেফারেন্স প্রদান করে। নিম্নলিখিত কোডের আউটপুট 1.1।

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtrসামনে();
খরচ<<fl<< 'n';

উপাদানটি ভেক্টর থেকে সরানো হয় না।

সামনের () const

যখন ভেক্টর নির্মাণ const এর আগে হয়, তখন অভিব্যক্তি front () const সামনে () এর পরিবর্তে কার্যকর করা হয়। এটি নিম্নলিখিত কোডে ব্যবহৃত হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtrসামনে();
খরচ<<fl<< 'n';

একটি ধ্রুবক রেফারেন্স ফেরত দেওয়া হয়। উপাদানটি ভেক্টর থেকে সরানো হয় না।

পেছনে()

এটি উপাদানটি না সরিয়ে ভেক্টরের শেষ উপাদানটির একটি রেফারেন্স প্রদান করে। নিম্নলিখিত কোডের আউটপুট 4.4।

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtrপেছনে();
খরচ<<fl<< 'n';

ফিরে () const

যখন ভেক্টর নির্মাণ const এর আগে হয়, তখন back () const এক্সপ্রেশনটি back () এর পরিবর্তে কার্যকর করা হয়। এটি নিম্নলিখিত কোডে ব্যবহৃত হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভাসাfl=vtrপেছনে();
খরচ<<fl<< 'n';

একটি ধ্রুবক রেফারেন্স ফেরত দেওয়া হয়। উপাদানটি ভেক্টর থেকে সরানো হয় না।

ভেক্টর ডেটা অ্যাক্সেস

তথ্য () noexcept; ডেটা () const noexcept;

এইগুলির মধ্যে একটি পয়েন্টার প্রদান করে যেমন [data (), data () + size ()) একটি বৈধ পরিসর।

এটি নিবন্ধে পরে আরও বিস্তারিতভাবে আচ্ছাদিত করা হবে।

রিটার্নিং ইটারেটর এবং ভেক্টর

একটি পুনরাবৃত্ত একটি পয়েন্টার মত কিন্তু একটি পয়েন্টার তুলনায় আরো কার্যকারিতা আছে।

start () noexcept

একটি পুনরাবৃত্তি প্রদান করে যা ভেক্টরের প্রথম উপাদানকে নির্দেশ করে, যেমন নিম্নোক্ত কোড সেগমেন্টে:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::পুনরাবৃত্তকারীইটার=vtrশুরু();
খরচ<< *ইটার<< 'n';

আউটপুট 1.1। মনে রাখবেন যে ঘোষণাপত্রটি পুনরাবৃত্তিকারীকে ঘোষণা করা হয়েছে। পুনরাবৃত্তিকে একটি রিটার্ন এক্সপ্রেশনে ডিফারেন্স করা হয় যেভাবে পয়েন্টারকে ডিফারেন্স করা হয় সেভাবে মান পেতে।

start () const noexcept;

একটি পুনরাবৃত্তি প্রদান করে যা ভেক্টরের প্রথম উপাদানকে নির্দেশ করে। যখন ভেক্টর নির্মাণ const এর আগে হয়, তখন অভিব্যক্তি start () const শুরু () এর পরিবর্তে কার্যকর করা হয়। এই অবস্থার অধীনে, ভেক্টরের সংশ্লিষ্ট উপাদান পরিবর্তন করা যাবে না। এটি নিম্নলিখিত কোডে ব্যবহৃত হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::const_iteratorইটার=vtrশুরু();
খরচ<< *ইটার<< 'n';

আউটপুট 1.1। মনে রাখবেন যে ফিরে আসা পুনরাবৃত্তিকে গ্রহণ করার জন্য কেবল পুনরাবৃত্তির পরিবর্তে const_iterator ব্যবহার করা হয়েছে।

শেষ () না

একটি পুনরাবৃত্তি প্রদান করে যা অবিলম্বে ভেক্টরের শেষ উপাদানটির বাইরে নির্দেশ করে। নিম্নলিখিত কোড বিভাগ বিবেচনা করুন:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::পুনরাবৃত্তকারীইটার=vtrশেষ();
খরচ<< *ইটার<< 'n';

আউটপুট 0, যা অর্থহীন, কারণ শেষ উপাদানটির বাইরে কোন কংক্রিট উপাদান নেই।

শেষ () const noexcept

একটি পুনরাবৃত্তি প্রদান করে যা অবিলম্বে ভেক্টরের শেষ উপাদানটির বাইরে নির্দেশ করে। যখন ভেক্টর নির্মাণ const এর আগে হয়, তখন end () const এক্সপ্রেশনটি end () এর পরিবর্তে কার্যকর করা হয়। নিম্নলিখিত কোড বিভাগ বিবেচনা করুন:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::const_iteratorইটার=vtrশেষ();
খরচ<< *ইটার<< 'n';

আউটপুট ০। নোট করুন যে ফিরে আসা ইটারেটর পাওয়ার জন্য শুধু ইটারেটরের পরিবর্তে const_iterator ব্যবহার করা হয়েছে।

বিপরীত পুনরাবৃত্তি

এটি একটি পুনরাবৃত্ত করা সম্ভব যা প্রথম উপাদান থেকে শেষ পর্যন্ত পুনরাবৃত্তি করে।

rbegin () noexcept

একটি পুনরাবৃত্তি প্রদান করে যা ভেক্টরের শেষ উপাদানটিকে নির্দেশ করে, যেমন নিম্নোক্ত কোড সেগমেন্টে:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::রিভার্স_ইটারেটরrIter=vtrrbegin();
খরচ<< *rIter<< 'n';

আউটপুট 4.4।

মনে রাখবেন যে ঘোষণাপত্রটি বিপরীত পুনরাবৃত্তিকে গ্রহণ করে তা ঘোষণা করা হয়েছে। পুনরাবৃত্তিকে একটি রিটার্ন এক্সপ্রেশনে ডিফারেন্স করা হয় যেভাবে পয়েন্টারকে ডিফারেন্স করা হয় সেভাবে মান পেতে।

rbegin () const noexcept;

একটি পুনরাবৃত্তি প্রদান করে যা ভেক্টরের শেষ উপাদানটিকে নির্দেশ করে। যখন ভেক্টর নির্মাণ const এর আগে হয়, তখন rbegin () const এক্সপ্রেশনটি rbegin () এর পরিবর্তে কার্যকর করা হয়। এই অবস্থার অধীনে, ভেক্টরের সংশ্লিষ্ট উপাদান পরিবর্তন করা যাবে না। এই বৈশিষ্ট্যটি নিম্নলিখিত কোডে ব্যবহৃত হয়:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::const_reverse_iteratorrIter=vtrrbegin();
খরচ<< *rIter<< 'n';

আউটপুট 4.4।

মনে রাখবেন যে ফিরে আসা পুনরাবৃত্তিকে গ্রহণ করার জন্য কেবল বিপরীত_ইটারেটরের পরিবর্তে const_reverse_iterator ব্যবহার করা হয়েছে।

render () noexcept

একটি পুনরাবৃত্তি প্রদান করে যা ভেক্টরের প্রথম উপাদানটির ঠিক আগে নির্দেশ করে। নিম্নলিখিত কোড বিভাগ বিবেচনা করুন:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::রিভার্স_ইটারেটরrIter=vtrতৈরি করে();
খরচ<< *rIter<< 'n';

আউটপুট 0, যা অর্থহীন, কারণ প্রথম উপাদানটির ঠিক আগে কোন কংক্রিট উপাদান নেই।

render () const noexcept

একটি পুনরাবৃত্তি প্রদান করে যা ভেক্টরের প্রথম উপাদানটির ঠিক আগে নির্দেশ করে। যখন ভেক্টর নির্মাণ const এর আগে হয়, তখন rend () const এক্সপ্রেশনটি rend () এর পরিবর্তে কার্যকর করা হয়। নিম্নলিখিত কোড বিভাগ বিবেচনা করুন:

constভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা> ::const_reverse_iteratorrIter=vtrতৈরি করে();
খরচ<< *rIter<< 'n';

আউটপুট 0।

মনে রাখবেন যে ফিরে আসা পুনরাবৃত্তিকে গ্রহণ করার জন্য কেবল বিপরীত_ইটারেটরের পরিবর্তে const_reverse_iterator ব্যবহার করা হয়েছে।

ভেক্টর সংশোধনকারী

একটি সংশোধনকারী যা ভেক্টরকে পরিবর্তন করে একটি পুনরাবৃত্তিকে নিতে বা ফেরত দিতে পারে।

a.emplace (p, args)

P এর আগে std :: forward (args) দিয়ে নির্মিত T টাইপের একটি বস্তু সন্নিবেশ করান।

বিস্তারিত জানতে - পরে দেখুন

সন্নিবেশ করান (iteratorPosition, value)

ভেক্টরের পুনরাবৃত্ত অবস্থানে মানটির একটি অনুলিপি সন্নিবেশ করান। যে ভেক্টরে কপিটি রাখা হয়েছে সেখানে ইটারেটর (অবস্থান) প্রদান করে। নিম্নলিখিত কোডটি দেখায় যে মানটি কোথায় স্থাপন করা হয়েছে:

ভেক্টর<int>vtr{10, বিশ, 30, 40};
ভেক্টর<int> ::পুনরাবৃত্তকারীইটার=vtrশুরু();
++ইটার;
++ইটার;
vtrসন্নিবেশ করান(ইটার, 25);
খরচ<<vtr[] << '' <<vtr[2]<< '
'
<<vtr[3] << 'n';

আউটপুট হল: 20 25 30।

লক্ষ্য করুন যে পুনরাবৃত্তিটি উন্নত ছিল (বর্ধিত) ঠিক একটি পয়েন্টার মত।

একটি সূচনাকারী তালিকাও সন্নিবেশ করা যেতে পারে, যেমন নিম্নলিখিত কোডটি ব্যাখ্যা করে:

ভেক্টর<int>vtr{10, বিশ, 30, 40};
ভেক্টর<int> ::পুনরাবৃত্তকারীইটার=vtrশুরু();
++ইটার;
++ইটার;
vtrসন্নিবেশ করান(ইটার, {25, 28});

খরচ<<vtr[] << '' <<vtr[2]<< '
'
<<vtr[3]<< '' <<vtr[4] << 'n';

আউটপুট হল: 20 25 28 30।

মুছুন (অবস্থান)

পুনরাবৃত্ত দ্বারা নির্দেশিত অবস্থানে একটি উপাদান সরিয়ে দেয়, তারপর পুনরাবৃত্তির অবস্থান প্রদান করে। নিচের কোডটি এটিকে ব্যাখ্যা করে:

ভেক্টর<int>vtr{10, বিশ, 30, 40};
ভেক্টর<int> ::পুনরাবৃত্তকারীইটার=vtrশুরু();
++ইটার;
++ইটার;
vtrমুছে ফেলা(ইটার);
খরচ<<vtr[0] << '' <<vtr[] << '
'
<<vtr[2]<< 'n';

আউটপুট হল: 10 20 40

push_back (t), push_back (rv)

ভেক্টরের শেষে একটি একক উপাদান যোগ করতে ব্যবহৃত হয়। নিম্নরূপ push_back (t) ব্যবহার করুন:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
vtrফেরত পাঠাও(5.5);
ভাসাfl=vtr[4];
খরচ<<fl<< 'n';

আউটপুট 5.5।

ফেরত পাঠাও(rv): -পরে দেখা হবে.

ফিরে পপ()

এটি ফেরত না দিয়ে শেষ উপাদানটি সরিয়ে দেয়। ভেক্টরের আকার 1 দ্বারা হ্রাস করা হয়। নিচের কোডটি এটি ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
vtrফিরে পপ();
ভাসাগুলি=vtrআকার();
খরচ<<গুলি<< 'n';

আউটপুট 3।

a. swap (b)

দুটি ভেক্টর অদলবদল করা যেতে পারে, যেমন নিম্নলিখিত কোড সেগমেন্টে দেখানো হয়েছে:

ভেক্টর<ভাসা>vtr1{1.1, 2.2, 3.3, 4.4};
ভেক্টর<ভাসা>vtr2{10, বিশ};
vtr1।বিনিময়(vtr2);
খরচ<< 'vtr1:'<<vtr1[0] <<''<<vtr1[] <<'
'
<<vtr1[2] <<''<<vtr1[3] << 'n';

খরচ<< 'vtr2:'<<vtr2[0] <<''<<vtr2[] <<'
'
<<vtr2[2] <<''<<vtr2[3] << 'n';

আউটপুট হল:

vtr1: 10 বিশ 0 0
vtr2: 1.1 2.2 3.3 4.4

মনে রাখবেন একটি ভেক্টরের দৈর্ঘ্য প্রয়োজনে বৃদ্ধি করা হয়েছে। এছাড়াও, যে মানগুলির প্রতিস্থাপন ছিল না সেগুলি কিছু ডিফল্ট মান দ্বারা প্রতিস্থাপিত হয়।

পরিষ্কার()

ভেক্টর থেকে সমস্ত উপাদান অপসারণ করে, যেমন নিম্নলিখিত কোড বিভাগটি ব্যাখ্যা করে:

ভেক্টর<ভাসা>vtr{1.1, 2.2, 3.3, 4.4};
vtrপরিষ্কার();
খরচ<<vtrআকার() << 'n';

আউটপুট 0।

ভেক্টরদের জন্য সমতা এবং রিলেশনাল অপারেটর

== অপারেটর

সত্যের জন্য 1 প্রদান করে যদি দুটি ভেক্টরের আকার একই হয় এবং সংশ্লিষ্ট উপাদান সমান হয়; অন্যথায়, এটি মিথ্যা জন্য 0 প্রদান করে। উদাহরণ স্বরূপ:

ভেক্টর<int>{, 2, 3};
ভেক্টর<int>ভি{4, 5, 6};
বুল bl===ভি;
খরচ<<bl<< 'n';

আউটপুট 0।

The! = অপারেটর

সত্যের জন্য 1 প্রদান করে যদি দুটি ভেক্টরের একই আকার না থাকে এবং/অথবা সংশ্লিষ্ট উপাদান সমান না হয়; অন্যথায়, এটি মিথ্যা জন্য 0 প্রদান করে। উদাহরণ স্বরূপ:

ভেক্টর<int>{, 2, 3};
ভেক্টর<int>ভি{4, 5, 6};
বুল bl=! =ভি;
খরচ<<bl<< 'n';

আউটপুট 1।

দ্য

সত্যের জন্য 1 প্রদান করে যদি প্রথম ভেক্টর দ্বিতীয় ভেক্টরের প্রাথমিক উপসেট হয়, দুটি সমান অংশের উপাদান একই এবং একই ক্রমে থাকে। যদি উভয় ভেক্টর একই আকারের হয় এবং বাম থেকে ডানে চলে যায় এবং প্রথম ভেক্টরে এমন একটি উপাদান দেখা যায় যা দ্বিতীয় ভেক্টরের সংশ্লিষ্ট উপাদানের চেয়ে কম হয়, তবে ১ টি এখনও ফেরত দেওয়া হবে। অন্যথায়, মিথ্যা জন্য 0 ফেরত দেওয়া হয়। উদাহরণ স্বরূপ:

ভেক্টর<int>{3, , };
ভেক্টর<int>ভি{3, 2, };
বুল bl=<ভি;
খরচ<<bl<< 'n';

আউটপুট 1।

অপারেটর

ফিরে! (ইউ

দ্য<= Operator

U প্রদান করে<= V, where U is the first vector and V is the second vector, according to the above definitions.

> = অপারেটর

ফিরে! (ইউ<= V), where U is the first vector and V is the second vector, according to the above definitions.

উপসংহার

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

তালিকা, ফরোয়ার্ড_লিস্ট এবং অ্যারে নামে অন্যান্য ক্রম ধারক রয়েছে। যদি টাস্ক ক্রম মাঝখানে ঘন ঘন সন্নিবেশ এবং মুছে ফেলা হয়, তাহলে একটি তালিকা বা forward_list ব্যবহার করা উচিত। যদি টাস্কটি ক্রমের শুরুতে বা শেষে ঘন ঘন সন্নিবেশ এবং মুছে ফেলা হয়, তাহলে একটি ডেক ব্যবহার করা উচিত। এবং তাই, ভেক্টরগুলি কেবল তখনই ব্যবহার করা উচিত যখন এই ধরণের অপারেশনগুলি গুরুত্বপূর্ণ না হয়।