[英]Overloading operator<<(ostream&, T) where T is “enum class MyEnum”
[英]Overloading ostream&<< to output a vector in reverse order from a class
我已经定义了一个带有公共向量的类,并且我试图使用反向迭代器以相反的顺序输出向量的每个成员。
std::ostream& operator<<(std::ostream& os, const bignum& num)
{
for (std::vector<char>::reverse_iterator p = num.vec.rbegin(); p != num.vec.rend(); ++p)
os << static_cast<int>(*p);
return os;
}
这东西不能编译,我对什么地方有点困惑。 谢谢。
您必须使用const_reverse_iterator:
std::ostream & operator<<( std::ostream &os, const bignum &num )
{
for ( std::vector<char>::const_reverse_iterator p = num.vec.rbegin();
p != num.vec.rend(); ++p )
os << static_cast<int>(*p);
return os;
}
您也可以使用标准算法std::copy
。 例如
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
//...
std::ostream & operator<<( std::ostream &os, const bignum &num )
{
std::copy( num.vec.rbegin(), num.vec.rend(),
std::ostream_iterator<int>( os ) );
return os;
}
由于您正在收到对const bignum
的引用,因此需要const_reverse_iterator
,而不仅是reverse_iterator
。
我只是使用std::copy
代替:
std::copy(num.vec.rbegin(), num.vec.rend(), std::ostream_iterator<int>(os));
所显示的所有答案都提供了很好的方法,我只花2美分:
std::for_each(num.vec.rbegin(),num.vec.rend(),[](int x){
std::cout << x << std::endl; // or any delimeter you wish
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.