gpt4 book ai didi

c++ - 从到非标量类型的迭代器错误转换

转载 作者:行者123 更新时间:2023-11-30 04:24:28 26 4
gpt4 key购买 nike

我必须编写一段代码来从容器 std::list 中删除任何重复项。我测试了不同的方法,但其中一种会产生我不理解的错误。我报错代码:

  std::list<clock_t> cList;
for(int i = 0;i< 5 ; ++i){
for(int j = 0;j < 1000000 ;++j);
cList.push_back(generatorClock()());
}
cList.sort();
std::list<clock_t> cListUnique;
std::list<clock_t>::iterator itEnd1 = **std::unique_copy(cList.begin(),cList.end(),std::back_insert_iterator<std::list<clock_t> >(cListUnique) );**

错误信息是

"error: conversion from ‘std::back_insert_iterator<std::list<long int> >’ to non-scalar type ‘std::list<long int>::iterator {aka std::_List_iterator<long int>}’ requested"

为什么会出现这个错误?谢谢

最佳答案

我假设 **放在那里是为了指示错误产生的位置,而不是实际来源的一部分。使用 **在 C++ 中是一个糟糕的选择,因为它通常用于取消引用迭代器或指针。

也就是说,std::unique_copy()返回一个指示写入序列结束的迭代器。您正在写信给 std::back_insert_iterator<std::list<clock_t> >这与 std::list<clock_t>::iterator 没有任何关系即使 std::back_insert_iterator<std::list<clock_t> >用于相同类型的列表。另外,你真的不需要它:你的 cListUnique将包含相应的唯一元素序列。它不像std::unique()您需要结束迭代器知道在哪里使用例如 erase() 切断序列.

关于c++ - 从到非标量类型的迭代器错误转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com