我手边没有好的C ++书籍,google也没什么用处。
这是如何工作的?从概念上讲,这里发生了什么?从技术上讲,是运算符<<()预定义的原型,这个作者如何知道如何编写它以便<<是否重载输出容器值?
我可以在哪里查看operator<<()
以便我可以超载它?
同样对于输入,您需要一个开头和结尾“地点”c.begin()
,c.end()
...但是对于输出,您需要一个“地点”ostream_iterator
。这似乎有点不对称。
template <typename Container>
std::ostream& operator<<(std::ostream& os, const Container& c)
{
std::copy(c.begin(), c.end(),
std::ostream_iterator<typename Container::value_type>(os, " "));
return os;
}
答案 0 :(得分:1)
这很模糊,但我会试一试:
从技术上讲,是运算符&lt;&lt;()预定义的原型,它的作者如何知道如何编写它以便&lt;&lt;是否重载输出容器值?
我在哪里可以查看运算符&lt;&lt;()以便我可以重载它?
您可以为所有尚未过载的用户定义类型重载运算符。有关详细信息,请参阅here。
同样对于输入,你需要一个开始和结束“地点”c.begin(),c.end()...但是对于输出你需要一个“地方”ostream_iterator。这似乎有点不对称。
将此视为一个问题......
这就是如何定义std::copy()
:它需要一个输入范围(由开始和结束迭代器定义),以及一个输出迭代器,用于写入的位置。它假定,无论它写在哪里,都有足够的空间。 (如果您使用输出流操作符,则总是有足够的空间。)
你可能想要自己a good C++ book。