টেমপ্লেট ফাংশন ব্যবহার করে যোগ দিন
আমি আইটেমগুলিতে template
function
যোগদানের জন্য একটি ব্যবহার vector
করেছি, এবং if
কেবলমাত্র প্রথমে পেনাল্টিমেট আইটেমের মাধ্যমে পুনরাবৃত্তি করে অপ্রয়োজনীয় বিবৃতিটি সরিয়েছি vector
, তারপরে শেষ আইটেমটিতে যোগ দিয়েছিfor
লুপের । এটি যুক্ত স্ট্রিংয়ের শেষে অতিরিক্ত বিভাজক অপসারণ করার জন্য অতিরিক্ত কোডের প্রয়োজনীয়তাও মেনে চলে। সুতরাং, if
পুনরাবৃত্তিটি কমিয়ে দেয়ার মতো কোনও বিবৃতি নেই এবং অতিরিক্ত পর্যায়ে যাওয়ার প্রয়োজন নেই এমন কোনও অতিরিক্ত অতিরিক্ত বিভাজক নেই।
এই যোগ দেবার মার্জিত ফাংশন কল উত্পাদন করে vector
এর string
,integer
অথবা double
, ইত্যাদি
আমি দুটি সংস্করণ লিখেছি: একটি স্ট্রিং দেয়; অন্যরা সরাসরি একটি স্ট্রিমে লেখেন।
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
template<typename T>
string join(const vector<T>& v, const string& sep)
{
ostringstream oss;
const auto LAST = v.end() - 1;
for (typename vector<T>::const_iterator p = v.begin(); p != LAST; ++p)
{
oss << *p << sep;
}
oss << *LAST;
return oss.str();
}
template<typename T>
void join(const vector<T>& v, const string& sep, ostream& os)
{
const auto LAST = v.end() - 1;
for (typename vector<T>::const_iterator p = v.begin(); p != LAST; ++p)
{
os << *p << sep;
}
os << *LAST;
}
int main()
{
vector<string> strings
{
"Joined",
"from",
"beginning",
"to",
"end"
};
vector<int> integers{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
vector<double> doubles{ 1.2, 3.4, 5.6, 7.8, 9.0 };
cout << join(strings, "... ") << endl << endl;
cout << join(integers, ", ") << endl << endl;
cout << join(doubles, "; ") << endl << endl;
join(strings, "... ", cout);
cout << endl << endl;
join(integers, ", ", cout);
cout << endl << endl;
join(doubles, "; ", cout);
cout << endl << endl;
return 0;
}
আউটপুট
Joined... from... beginning... to... end
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1.2; 3.4; 5.6; 7.8; 9
Joined... from... beginning... to... end
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1.2; 3.4; 5.6; 7.8; 9