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

时间:2013-03-15 14:45:45

标签: c++ stdvector

如何打印std::vector?例如,如果我构造一个std::vector<int>(6, 1),我可以在C ++中运行它来获取{1 1 1 1 1 1}之类的输出吗?它必须是通用的,因为大小和值可能会发生变化,因此std::vector<int>(4, 0)将为{0 0 0 0}

1 个答案:

答案 0 :(得分: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;
}

然后您可以使用正常的operator<<语法输出您的向量:

std::cout<<yourVector;

您可以在行动here中看到这一点。

但是对于更灵活的解决方案,请查看question linked above


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

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