我想用std::find_if
遍历std::streambuf
的内容相反。这包括从std::istream_iterator
或std::istreambuf_iterator
构建std::reverse_iterator
。不幸的是,试图做到这一点,如下面的代码示例所示,会导致编译错误。我怎样才能使这个工作?如果有必要,使用Boost的解决方案会很好。迭代流逆向
#include <cstddef>
#include <fstream>
#include <iterator>
template <class Iterator>
static std::reverse_iterator<Iterator>
make_reverse_iterator(Iterator i)
{
return std::reverse_iterator<Iterator>(i);
}
int main()
{
std::ifstream is{"foo.txt", std::ios::binary};
std::istreambuf_iterator<char> i{is};
auto r = make_reverse_iterator(i);
// Error =(
*r;
return EXIT_SUCCESS;
}
这里报道编译错误的g++-4.8.1
:
In file included from /opt/local/include/gcc48/c++/bits/stl_algobase.h:67:0,
from /opt/local/include/gcc48/c++/bits/char_traits.h:39,
from /opt/local/include/gcc48/c++/ios:40,
from /opt/local/include/gcc48/c++/istream:38,
from /opt/local/include/gcc48/c++/fstream:38,
from ri.cpp:9:
/opt/local/include/gcc48/c++/bits/stl_iterator.h: In instantiation of 'std::reverse_iterator<_Iterator>::reference std::reverse_iterator<_Iterator>::operator*() const [with _Iterator = std::istream_iterator<char>; std::reverse_iterator<_Iterator>::reference = const char&]':
ri.cpp:24:3: required from here
/opt/local/include/gcc48/c++/bits/stl_iterator.h:163:10: error: no match for 'operator--' (operand type is 'std::istream_iterator<char>')
return *--__tmp;
^
感谢您的帮助!
请告诉我编译错误? – Borgleader
@Borgleader我刚刚编辑了问题以包含编译错误。 –
向后迭代流?并非所有的流都能够“倒带”,所以我怀疑是否有一种非常通用的方式来做到这一点。 – John3136