重载ostream&<<从类中以相反的顺序输出向量

时间:2015-03-29 19:27:42

标签: c++

我已经定义了一个带有公共向量的类,我试图使用反向迭代器以相反的顺序输出向量的每个成员。

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

这件事没有编译,我对错误感到困惑。感谢。

3 个答案:

答案 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
 });