Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::acculate累积到std::ostream中_C++_C++11_Stream_Operator Overloading_Ostream - Fatal编程技术网

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); });
}