Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::forward_list<T,Allocator>::unique

      From cppreference.com
      <cpp‎ |container‎ |forward list

      [edit template]
       
       
       
      std::forward_list
      Member functions
      Non-member functions
      (until C++20)(until C++20)(until C++20)(until C++20)(until C++20)
      Deduction guides(C++17)
       
      (1)
      void unique();
      (since C++11)
      (until C++20)
      size_type unique();
      (since C++20)
      (constexpr since C++26)
      (2)
      template<class BinaryPred>
      void unique( BinaryPred p);
      (since C++11)
      (until C++20)
      template<class BinaryPred>
      size_type unique( BinaryPred p);
      (since C++20)
      (constexpr since C++26)

      Removes allconsecutive duplicate elements from the container. Only the first element in each group of equal elements is left.

      1) Equivalent tounique(std::equal_to<T>())(until C++14)unique(std::equal_to<>())(since C++14).
      2) Usesp to compare the elements.
      Ifp does not establish an equivalence relation, the behavior is undefined.

      Invalidates only the iterators and references to the removed elements.

      Contents

      [edit]Parameters

      p - binary predicate which returns ​true if the elements should be treated as equal.

      The signature of the predicate function should be equivalent to the following:

       bool pred(const Type1&a,const Type2&b);

      While the signature does not need to haveconst&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const)Type1 andType2 regardless ofvalue category (thus,Type1& is not allowed, nor isType1 unless forType1 a move is equivalent to a copy(since C++11)).
      The typesType1 andType2 must be such that an object of typeforward_list<T,Allocator>::const_iterator can be dereferenced and then implicitly converted to both of them.​

      Type requirements
      -
      BinaryPred must meet the requirements ofBinaryPredicate.

      [edit]Return value

      (none)

      (until C++20)

      The number of elements removed.

      (since C++20)

      [edit]Complexity

      Ifempty() istrue, no comparison is performed.

      Otherwise, given\(\scriptsize N\)N asstd::distance(begin(), end()):

      1) Exactly\(\scriptsize N-1\)N-1 comparisons usingoperator==.
      2) Exactly\(\scriptsize N-1\)N-1 applications of the predicatep.

      [edit]Notes

      Feature-test macroValueStdFeature
      __cpp_lib_list_remove_return_type201806L(C++20)Change the return type

      [edit]Example

      Run this code
      #include <iostream>#include <forward_list> std::ostream& operator<<(std::ostream& os,std::forward_list<int>const& container){for(int val: container)        os<< val<<' ';return os<<'\n';} int main(){std::forward_list<int> c{1,2,2,3,3,2,1,1,2};std::cout<<"Before unique(): "<< c;constauto count1= c.unique();std::cout<<"After unique():  "<< c<< count1<<" elements were removed\n";     c={1,2,12,23,3,2,51,1,2,2};std::cout<<"\nBefore unique(pred): "<< c; constauto count2= c.unique([mod=10](int x,int y){return(x% mod)==(y% mod);}); std::cout<<"After unique(pred):  "<< c<< count2<<" elements were removed\n";}

      Output:

      Before unique(): 1 2 2 3 3 2 1 1 2After unique():  1 2 3 2 1 23 elements were removed Before unique(pred): 1 2 12 23 3 2 51 1 2 2After unique(pred):  1 2 23 2 51 24 elements were removed

      [edit]See also

      removes consecutive duplicate elements in a range
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/forward_list/unique&oldid=130405"

      [8]ページ先頭

      ©2009-2025 Movatter.jp