我试图编译一个使用std :: make_reverse_iterator的c ++程序,但是我得到了标题错误。 reference表示自c ++ 14以来确实支持该函数,所以我添加了标志-std = c ++ 14,但仍然没有骰子。我已经挖了一段时间,无法弄清楚为什么会这样。有任何想法吗?我的编译器版本是g ++ 4.9.2
这是一个简单的程序(取自上面的ref),用于编译它的命令,以及程序的输出。
TEST.CPP:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
int main() {
auto v = std::vector<int>{ 1, 3, 10, 8, 22 };
std::sort(v.begin(), v.end());
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
std::cout << '\n';
std::copy(
std::make_reverse_iterator(v.end()),
std::make_reverse_iterator(v.begin()),
std::ostream_iterator<int>(std::cout, ", "));
}
编译器:
g++ -std=c++14 test.cpp -o test
输出:
test.cpp: In function ‘int main()’:
test.cpp:15:9: error: ‘make_reverse_iterator’ is not a member of ‘std’
std::make_reverse_iterator(v.end()),
^
test.cpp:16:9: error: ‘make_reverse_iterator’ is not a member of ‘std’
std::make_reverse_iterator(v.begin()),
答案 0 :(得分:2)
make_reverse_iterator()
作为LWG 2285的结果添加,并且在December 2014之前未添加到libsdtc ++中。这是在5.1发布,以及那里的一切。 4.9.2现在还为时尚早。如果可能的话,只需升级即可。
如果不可能,只需复制cppreference implementation:
即可自行添加template< class Iterator >
std::reverse_iterator<Iterator> make_reverse_iterator(Iterator i)
{
return std::reverse_iterator<Iterator>(i);
}