সি ++ 17 : হ্যাঁ! আপনার একটি কাঠামোগত বাধ্যবাধকতা ঘোষণা ব্যবহার করা উচিত । সিনট্যাক্সটি কয়েক বছর ধরে জিসিসি এবং জঞ্জাল (জিসিসি -7 এবং ঝনঝন -২.০) থেকে সমর্থিত হয়েছে ( ঝাঁকুনির সরাসরি উদাহরণ )। এটি আমাদেরকে এর মতো একটি টুপল আনপ্যাক করতে দেয়:
for (auto [i, f, s] = std::tuple{1, 1.0, std::string{"ab"}}; i < N; ++i, f += 1.5) {
// ...
}
উপরেরটি আপনাকে দেবে:
int i
সেট 1
double f
সেট 1.0
std::string s
সেট "ab"
#include <tuple>
এই ধরণের ঘোষণার জন্য নিশ্চিত হন ।
আপনি টাইপটির সাথে সঠিক টাইপগুলি নির্দিষ্ট করে নির্দিষ্ট tuple
করে লিখতে পারেন যেমন আমার সাথে রয়েছে std::string
, আপনি যদি কোনও প্রকারের নাম বলতে চান। উদাহরণ স্বরূপ:
auto [vec, i32] = std::tuple{std::vector<int>{3, 4, 5}, std::int32_t{12}}
এটির একটি নির্দিষ্ট অ্যাপ্লিকেশন হ'ল মানচিত্রের পুনরাবৃত্তি, কী এবং মান পাওয়া,
std::unordered_map<K, V> m = { /*...*/ };
for (auto& [key, value] : m) {
// ...
}
এখানে একটি সরাসরি উদাহরণ দেখুন
সি ++ 14 : আপনি টাইপ-ভিত্তিক সংযোজন দিয়ে সি ++ 11 (নীচে) এর মতোই করতে পারেন std::get
। সুতরাং std::get<0>(t)
নীচের উদাহরণের পরিবর্তে , আপনি থাকতে পারেন std::get<int>(t)
।
সি ++ 11 : std::make_pair
আপনাকে এটি করতে পাশাপাশি std::make_tuple
দুটিরও বেশি অবজেক্টের জন্য অনুমতি দেয়।
for (auto p = std::make_pair(5, std::string("Hello World")); p.first < 10; ++p.first) {
std::cout << p.second << std::endl;
}
std::make_pair
একটিতে দুটি যুক্তি ফিরিয়ে দেবে std::pair
। উপাদানগুলির সাথে .first
এবং অ্যাক্সেস করা যায় .second
।
দুটিরও বেশি অবজেক্টের জন্য আপনাকে একটি ব্যবহার করতে হবে std::tuple
for (auto t = std::make_tuple(0, std::string("Hello world"), std::vector<int>{});
std::get<0>(t) < 10;
++std::get<0>(t)) {
std::cout << std::get<1>(t) << std::endl; // cout Hello world
std::get<2>(t).push_back(std::get<0>(t)); // add counter value to the vector
}
std::make_tuple
হ'ল একটি বৈকল্পিক টেম্পলেট যা কোনও সংখ্যক যুক্তি (কোর্সের কিছু প্রযুক্তিগত সীমাবদ্ধতা সহ) এর একটি গঠন তৈরি করবে। উপাদানগুলি সূচক দ্বারা অ্যাক্সেস করা যেতে পারেstd::get<INDEX>(tuple_object)
লুপ জন্য মৃতদেহ মধ্যে আপনি যা করতে পারেন সহজে বস্তু ওরফে, আপনি কি এখনও ব্যবহার করতে হবে যদিও .first
বা std::get
লুপ শর্ত এবং আপডেট অভিব্যক্তি জন্য
for (auto t = std::make_tuple(0, std::string("Hello world"), std::vector<int>{});
std::get<0>(t) < 10;
++std::get<0>(t)) {
auto& i = std::get<0>(t);
auto& s = std::get<1>(t);
auto& v = std::get<2>(t);
std::cout << s << std::endl; // cout Hello world
v.push_back(i); // add counter value to the vector
}
সি ++ 98 এবং সি ++ 03 আপনি স্পষ্টভাবে a এর প্রকারের নাম বলতে পারেন std::pair
। এটি দুটি ধরণের বেশি সাধারণ করার কোনও মানক উপায় নেই যদিও:
for (std::pair<int, std::string> p(5, "Hello World"); p.first < 10; ++p.first) {
std::cout << p.second << std::endl;
}
-std=c++0x
) আকারেfor(auto i=0, j=0.0; ...
সম্ভব, তবে এই সম্ভাবনাটি g ++ - 4.5 তে সরানো হয়েছে সি ++ 0x পাঠ্যের সাথে মিলে যাওয়ার জন্য।