在C++中漂亮地打印std :: vector

dha*_*rag 3 c++ stdvector

我怎么漂亮打印std::vector?例如,如果我构造一个std::vector<int>(6, 1),我可以运行它来获得像{1 1 1 1 1 1}C++ 一样的输出吗?它必须是通用的,因为大小和值可能会改变,因此std::vector<int>(4, 0)也是如此{0 0 0 0}.

Mat*_*lia 11

#include <vector>
#include <algorithm>
#include <iterator>

template<typename T>
std::ostream & operator<<(std::ostream & os, std::vector<T> vec)
{
    os<<"{ ";
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<T>(os, " "));
    os<<"}";
    return os;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用普通operator<<语法输出你的向量:

std::cout<<yourVector;
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到这个.

但是对于更灵活的解决方案,请查看上面链接问题.


编辑:如果你不想要两个空格(在开头和结尾):

template<typename T>
std::ostream & operator<<(std::ostream & os, std::vector<T> vec)
{
    os<<"{";
    if(vec.size()!=0)
    {
        std::copy(vec.begin(), vec.end()-1, std::ostream_iterator<T>(os, " "));
        os<<vec.back();
    }
    os<<"}";
    return os;
}
Run Code Online (Sandbox Code Playgroud)

  • @MatteoItalia:这就是为什么我只用空格或换行作为分隔符来使用它,因为它对其他任何东西几乎都没用.另一方面,如果向量不为空,则添加一个检查,然后复制到`--vec.end()`并在额外的步骤中打印最后一项. (2认同)