[英]C++ basic custom cout printing to consle
template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{
os << s << " = (\n";
os << charInput1;
std::copy(first, last, std::ostream_iterator<int>(std::cout, "\n"));
os << charInput2;
os << "\n)";
}
我正在嘗試進行自定義提示打印。 該成員函數屬於CustomPrinter
類,並且charInput1
和charInput2
是其私有char
成員,在構造自定義打印機時會定義它們。 第first
和last
應該是迭代器,並且s
是一個字符串。
因此,例如,給定的charInput1
是一個+
號,而charInput2
是一個句點.
,在std::vector<int> = {1, 1, 1}
的情況下,我希望最終輸出如下:
(
+1.
+1.
+1.
)
但是我越來越
(
+1
1
1
.
)
所以我的問題是,要在每個矢量元素之間打印給定的char
,還需要什么? 是否可以僅使用std::ostream_iterator<int>(std::cout, /* char here? */)
? 因為似乎此方法只能在之間插入字符串,所以我也需要在前面插入。 如果沒有,有什么更好的方法? 提前致謝!
編輯:在我主要
CustomPrinter cp(std::cout, '+', '.');
std::vector<int> v = {1, 1, 1};
cp.print("result", v.begin(), v.end()); // function call..
只需使用普通循環即可:
template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{
os << s << " = (\n";
for (auto el = first; el != last; el++) {
os << charInput1 << *el << charInput2 << "\n";
}
os << ")";
}
實際上,您可以使用std::ostream_iterator
,方法是串聯周圍的字符。
template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{
std::string sep = charInput1 + std::string("\n") + charInput2;
os << s << " = (\n";
if (first != last) { // Don't print first prefix and last suffix if the sequence is empty
os << charInput1;
std::copy(first, last, std::ostream_iterator<int>(std::cout, sep.c_str()));
os << charInput2;
}
os << "\n)";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.