我已经定义了一个带有公共向量的类,我试图使用反向迭代器以相反的顺序输出向量的每个成员。
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;
}
这件事没有编译,我对错误感到困惑。感谢。
答案 0 :(得分:1)
你必须使用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;
}
答案 1 :(得分:1)
由于您收到了对const bignum
的引用,因此您需要const_reverse_iterator
,而不仅仅是reverse_iterator
。
我只是使用std::copy
代替:
std::copy(num.vec.rbegin(), num.vec.rend(), std::ostream_iterator<int>(os));
答案 2 :(得分:0)
显示的所有答案提供了很好的方法,我只需要投入2美分:
std::for_each(num.vec.rbegin(),num.vec.rend(),[](int x){
std::cout << x << std::endl; // or any delimeter you wish
});