如何解决ostream_iterator转换问题?

时间:2019-08-17 15:59:34

标签: c++

我正在研究'unique_copy(首先是forwrdIt,最后是forwrdIt,forwrdIt结果)',并且我尝试将结果传递为:'ostream_iterator(cout,“”)',但是它抛出了一个错误'对参数1的未知转换' std :: ostream_iterator'到'__gnu_cxx :: __ normal_iterator> &&'。我可以创建另一个向量,然后可以插入它的迭代器。为什么这样?

我可以创建另一个向量,然后将其插入begin()迭代器。为什么这样?

vector<int> v = {1,2,3,1,2,2,2,3,4,5,5,5,6,7,7,8,1,1};
vector<int>::iterator ip;
    ip = unique_copy(v.begin(), v.end(), ostream_iterator<int>(cout, ","));

1 2 3 1 2 3 4 5 6 7 8 1

1 个答案:

答案 0 :(得分:3)

如果您查看std::unique_copy算法的文档,它会显示函数返回类型与目标迭代器类型相同。

算法目标是std::ostream_iterator<int>,而您正在尝试将返回的迭代器分配给std::vector<int>::iterator。该错误是由于类型不匹配造成的。

如果您删除分配并仅调用算法,则代码将编译。

vector<int> v = {1,2,3,1,2,2,2,3,4,5,5,5,6,7,7,8,1,1};
unique_copy(v.begin(), v.end(), ostream_iterator<int>(cout, ","));