C++:将标准库容器打印或输出到控制台

hli*_*117 5 c++ printing cout c++-standard-library

将 C++ 打印或coutC++ 标准库容器打印到控制台以查看其内容的方式是什么?

另外,为什么 C++ 库实际上没有<<为您重载运算符?背后有什么历史吗?

Vla*_*cow 1

最简单的方法是使用基于范围的 for 语句。例如

#include <iostream>
#include <string>
#include <vector>
#include <iterator>

template <class Container>
std::ostream & display( const Container &container, 
                        const char *s = " ",
                        std::ostream &os = std::cout )
{
    for ( const auto &value : container )
    {
        os << value << s;
    }

    return os;
}

int main()
{
    int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    std::vector<int> v( std::begin( a ), std::end( a ) );

    display( a, "; " );
    std::cout << std::endl;

    display( v );
    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序输出是

0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 
0 1 2 3 4 5 6 7 8 9 
Run Code Online (Sandbox Code Playgroud)

然而,更灵活的方法是使用标准算法std::copy。在这种情况下,您可以自己设置显示范围并使用反向迭代器。您还可以编写函数以获取附加信息。

为什么 C++ 库实际上没有为您重载 << 运算符?

因为任何用户都可以使用自己的方法来输出容器,正如您从我的演示程序的输出中看到的那样。事实上,容器是一个用户定义的类,用户应该重载运算符<<。std::string 和 std::bitset 有例外,但字符串和位集作为一个实体输出,没有中间分隔,类似于基本类型。