C++ 使用std::acculate累积到std::ostream中
我试图使用C++ 使用std::acculate累积到std::ostream中,c++,c++11,stream,operator-overloading,ostream,C++,C++11,Stream,Operator Overloading,Ostream,我试图使用std::acculate在操作符中写入std::ostream不要使用acculate,使用: std::ostream&operator因为您提到了每个也可以使用(提到acculate只是为了迷惑火星人): std::ostream&operator可以这样做: // Using accumulate std::ostream& out_acc(const std::vector<int>& is, std::ostream& out) {
std::acculate
在操作符中写入std::ostream
不要使用acculate
,使用:
std::ostream&operator因为您提到了每个
也可以使用(提到acculate只是为了迷惑火星人):
std::ostream&operator可以这样做:
// Using accumulate
std::ostream& out_acc(const std::vector<int>& is, std::ostream& out)
{
return std::accumulate(is.begin(),
is.end(),
std::ref(out),
[](std::ostream& os, int i) -> std::ostream&
{ return os << i << ", "; });
}
// Using for_each
std::ostream& out_for(const std::vector<int>& is, std::ostream& out)
{
std::for_each(is.begin(),
is.end(),
[&](int i)
{ out << i << ", "; });
return out;
}
//使用累加
std::ostream&out_acc(常数std::vector&is,std::ostream&out)
{
return std::accumulate(is.begin(),
is.end(),
标准::参考(输出),
[](std::ostream&os,int i)->std::ostream&
{return os您可能会像这样滥用std::acculate
:
std::ostream& operator<<(std::ostream& stream, A& a) {
return std::accumulate(a.v.begin(), a.v.end(), std::ref(stream),
[](std::ostream& stream, int e)
{ return std::ref(stream << " " << e); });
}
这就像“如何把一个方形的钉子装进一个圆孔里”不幸的是,我需要使用“<代码>累积”/代码>或<代码>,以<每一个< /代码>为例。这是一些C++课程中的一个问题,当你在这里发布问题时,你忽略了其中一个选项?叹息。“伦巴克是我自己的项目。,这就是为什么我没有在原始帖子中提到它。@Jarod42是的,但OP只有这两种选择。酷。永远不要低估滥用算法的方法的数量;-)我很高兴在这个上下文中进一步研究std::acculate
的可能滥用:是否可以使用(适当的)本机std::ostream
operator@dfri:您有两个问题:成员函数应该在常规functor中打开,操作符啊,我以前没有看到使用std::mem_fn
,静态强制转换指定要使用的重载对我来说也是新的。很多启示,非常感谢Jarod42!
std::ostream& operator<<(std::ostream& stream, const A& a) {
std::for_each(begin(a.v), end(a.v), [](int i){ std::cout << i << " "; });
return stream;
}
// Using accumulate
std::ostream& out_acc(const std::vector<int>& is, std::ostream& out)
{
return std::accumulate(is.begin(),
is.end(),
std::ref(out),
[](std::ostream& os, int i) -> std::ostream&
{ return os << i << ", "; });
}
// Using for_each
std::ostream& out_for(const std::vector<int>& is, std::ostream& out)
{
std::for_each(is.begin(),
is.end(),
[&](int i)
{ out << i << ", "; });
return out;
}
std::ostream& operator<<(std::ostream& stream, A& a) {
return std::accumulate(a.v.begin(), a.v.end(), std::ref(stream),
[](std::ostream& stream, int e)
{ return std::ref(stream << " " << e); });
}