输出以 space 分隔的列表
Outputing a list separated by space
我正在重载运算符 << 以输出由 space:
分隔的容器
std::ostream& operator<< (std::ostream &os, const MyContainer &v)
{
os << "[";
for (const auto &i : v) {
os << i << " ";
}
os << "\b]"; // <--
return os;
}
MyContainer c{1,2,3};
std::cout<<c<<std::endl;
我正在使用 '\b' 来避免列表末尾的额外 space,它适用于上面的代码。
但这可能不是一个好主意,'\b' 是否可以与其他类型的 ostream
一起使用?还有其他想法可以像这样输出数据吗?
But it might not be a good idea, does '\b'
work well with other types of ostream
?
关于这不是一个好主意,你完全正确:'\b'
在控制台模式下工作正常,但它不能很好地与其他流播放,例如文件。
更好的方法是首先不输出额外的space:
std::ostream& operator<< (std::ostream &os, const MyContainer &v)
{
os << "[";
auto first = true;
for (const auto &i : v) {
if (!first) {
os << " ";
} else {
first = false;
}
os << i;
}
os << "]";
return os;
}
一个简单实用的解决方案是在范围循环之前添加一个space:
std::ostream& operator<< (std::ostream &os, const MyContainer &v)
{
os << "[ "; // <--
for (const auto &i : v) {
os << i << " ";
}
os << "]";
return os;
}
MyContainer c{1,2,3};
std::cout<<c<<std::endl;
结果是一个略有不同的输出,但仍然达到了视觉上令人愉悦的对称格式的假定目标:而不是 [1 2 3]
你得到 [ 1 2 3 ]
。空列表将打印为 [ ]
.
我正在重载运算符 << 以输出由 space:
分隔的容器std::ostream& operator<< (std::ostream &os, const MyContainer &v)
{
os << "[";
for (const auto &i : v) {
os << i << " ";
}
os << "\b]"; // <--
return os;
}
MyContainer c{1,2,3};
std::cout<<c<<std::endl;
我正在使用 '\b' 来避免列表末尾的额外 space,它适用于上面的代码。
但这可能不是一个好主意,'\b' 是否可以与其他类型的 ostream
一起使用?还有其他想法可以像这样输出数据吗?
But it might not be a good idea, does
'\b'
work well with other types ofostream
?
关于这不是一个好主意,你完全正确:'\b'
在控制台模式下工作正常,但它不能很好地与其他流播放,例如文件。
更好的方法是首先不输出额外的space:
std::ostream& operator<< (std::ostream &os, const MyContainer &v)
{
os << "[";
auto first = true;
for (const auto &i : v) {
if (!first) {
os << " ";
} else {
first = false;
}
os << i;
}
os << "]";
return os;
}
一个简单实用的解决方案是在范围循环之前添加一个space:
std::ostream& operator<< (std::ostream &os, const MyContainer &v)
{
os << "[ "; // <--
for (const auto &i : v) {
os << i << " ";
}
os << "]";
return os;
}
MyContainer c{1,2,3};
std::cout<<c<<std::endl;
结果是一个略有不同的输出,但仍然达到了视觉上令人愉悦的对称格式的假定目标:而不是 [1 2 3]
你得到 [ 1 2 3 ]
。空列表将打印为 [ ]
.