একটি উপাদানের মূল মান std::setহয় constএকটি ভাল কারণে। এগুলি সংশোধন করা ক্রমের জন্য নষ্ট হতে পারে যা এ এর জন্য প্রয়োজনীয় std::set।
অতএব, সমাধানটি হল পুনরাবৃত্তিকে মুছে ফেলা এবং কী দিয়ে একটি নতুন সন্নিবেশ করানো *it - sub। দয়া করে নোট করুন যে std::set::erase()একটি নতুন পুনরাবৃত্তি প্রদান করে যা আপনার ক্ষেত্রে লুপটি সঠিকভাবে কাজ করার জন্য ব্যবহার করতে হবে।
#include<iostream>
#include<set>
template <typename T>
std::ostream& operator<<(std::ostream &out, const std::set<T> &values)
{
const char *sep = "{ ";
for (const T &value : values) { out << sep << value; sep = ", "; }
return out << " }";
}
int main()
{
std::set<int> test{ 11, 12, 13, 14, 15 };
std::cout << "test: " << test << '\n';
const int sub = 10;
std::set<int>::iterator iter = test.begin();
while (iter != test.end()) {
const int value = *iter;
iter = test.erase(iter);
test.insert(value - sub);
}
std::cout << "test: " << test << '\n';
}
আউটপুট:
test: { 11, 12, 13, 14, 15 }
test: { 1, 2, 3, 4, 5 }
কলিরুতে লাইভ ডেমো
std::setএটির পুনরাবৃত্তি করার সময় পরিবর্তনগুলি সাধারণভাবে সমস্যা নয় তবে এটি সূক্ষ্ম সমস্যার কারণ হতে পারে।
সর্বাধিক গুরুত্বপূর্ণ সত্যটি হ'ল সমস্ত ব্যবহৃত পুনরাবৃত্তিকে অক্ষত রাখতে হবে বা আর ব্যবহার করা যাবে না। (এই কারণেই মুছে ফেলা উপাদানটির বর্তমান পুনরাবৃত্তিকে প্রত্যাবর্তনের মান হিসাবে নির্ধারিত std::set::erase()করা হয় যা হয় অক্ষত পুনরাবৃত্তকারী বা সেটটির সমাপ্তি))
অবশ্যই, উপাদানগুলি বর্তমান পুনরাবৃত্তির পিছনেও সন্নিবেশ করা যেতে পারে। যদিও এটি কোনও সমস্যা নয় তবে std::setএটি আমার উপরের উদাহরণটির লুপটি ভেঙে দিতে পারে।
এটি প্রদর্শনের জন্য, আমি উপরের নমুনাটি কিছুটা পরিবর্তন করেছি। দয়া করে নোট করুন যে লুপের সমাপ্তির জন্য আমি একটি অতিরিক্ত কাউন্টার যুক্ত করেছি:
#include<iostream>
#include<set>
template <typename T>
std::ostream& operator<<(std::ostream &out, const std::set<T> &values)
{
const char *sep = "{ ";
for (const T &value : values) { out << sep << value; sep = ", "; }
return out << " }";
}
int main()
{
std::set<int> test{ 11, 12, 13, 14, 15 };
std::cout << "test: " << test << '\n';
const int add = 10;
std::set<int>::iterator iter = test.begin();
int n = 7;
while (iter != test.end()) {
if (n-- > 0) {
const int value = *iter;
iter = test.erase(iter);
test.insert(value + add);
} else ++iter;
}
std::cout << "test: " << test << '\n';
}
আউটপুট:
test: { 11, 12, 13, 14, 15 }
test: { 23, 24, 25, 31, 32 }
কলিরুতে লাইভ ডেমো