C++ 基本自定义 cout 打印到控制台
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)";
}
我正在尝试进行自定义 cout 打印。这个成员函数属于classCustomPrinter
,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? */)
?因为这个方法好像只能在中间插入字符串,所以我也需要在before插入。如果没有,什么是更好的方法?提前致谢!
编辑:我主要有
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)";
}
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)";
}
我正在尝试进行自定义 cout 打印。这个成员函数属于classCustomPrinter
,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? */)
?因为这个方法好像只能在中间插入字符串,所以我也需要在before插入。如果没有,什么是更好的方法?提前致谢!
编辑:我主要有
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)";
}