1

コンテナstd::listから重複を削除するコードを作成する必要があります。私はさまざまな方法をテストしましたが、1つは私が理解できないエラーを生成します。間違ったコードを報告します:

  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"

なぜこのエラーが発生するのですか?ありがとうございました

4

3 に答える 3

2

**実際のソースの一部ではなく、エラーが発生した場所を示すためにそこに配置されていると思います。Using**は通常、反復子またはポインターを逆参照するために使用されるため、C++ では不適切な選択です。

つまりstd::unique_copy()、書き込みシーケンスの終了を示す反復子を返します。が同じタイプのリストであっても、std::back_insert_iterator<std::list<clock_t> >実際には a とは何の関係もないa に書いています。また、実際には必要ありません。一意の要素の対応するシーケンスが含まれます。たとえば、.std::list<clock_t>::iteratorstd::back_insert_iterator<std::list<clock_t> >cListUniquestd::unique()erase()

于 2012-10-06T12:13:28.607 に答える
0

unique_copyの戻り型:

OutputIterator unique_copy(InputIterator first, InputIterator last, OutputIterator result);

ですOutputIterator

試す:

std::back_insert_iterator< std::list< int > > itEnd1 = std::unique_copy( cList.begin(), cList.end(), std::back_insert_iterator< std::list< int > >( cListUnique ) );
于 2012-10-06T12:13:15.567 に答える