logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

FBB::PtrIter - Iterator returning pointer when dereferenced

Author

       Frank B. Brokken (f.b.brokken@rug.nl).

libbobcat-dev_6.07.01                               2005-2025                              FBB::PtrIter(3bobcat)

Bobcat

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

Bobcat Project Files

       o      https://fbb-git.gitlab.io/bobcat/: gitlab project page;

       Debian Bobcat project files:

       o      libbobcat6: debian package containing the shared library, changelog and copyright note;

       o      libbobcat-dev: debian package containing the static library, headers, manual pages, and  developer
              info;

Bugs

       None Reported.

Constructors

       o      PtrIter(Iteratorconst&iter):
              The  iter  parameter  must  be  initialized  with  an existing input iterator, offering operator*,operator++,operator== and operator!=.   As  PtrIter  is  a  class  template,  its  template  type
              parameters must be specified when defining a PtrIter object. E.g.,

                  PtrIter<set<string>::iterator> PtrIter(mySet.begin());

       Copy and move constructors (and assignment operators) are available.

Description

       The  PtrIter  class  template  implements  an  input  iterator whose operator* returns the address of the
       element the iterator refers to.  Consider a std::unordered_map<std::string,DataType>. Its  begin  member
       returns an iterator whose operator* returns a std::pair<std::string,DataType>(const)&. This is usually
       what  you  want,  but  now  assume  we want to display the map’s content, sorted by its keys. Sorting can
       simply be performed by defining a support vector containing pointers to the elements in the map, and then
       sorting the strings the pointers point at.

       PtrIter is a tool that can be used to construct such a support vector, as shown in the EXAMPLE section.

       PtrIter is a class template requiring one template type parameter: Iterator, the iterator’s  type  (e.g.,
       vector<string>::iterator)

       PtrIter’s  users  don’t  have  to  specify  PtrIter’s  template type. The function template ptrIter, when
       provided with an iterator returns the matching PtrIter object.

Example

       #include <algorithm>
       #include <unordered_map>
       #include <vector>
       #include <cstring>
       #include <iostream>

       #include <bobcat/ptriter>

       using namespace std;
       using namespace FBB;

       int main()
       {
           cout << "Enter lines, the first word will be the map’s key; "
                                                   "^D when done.\n";

           string key;
           string line;
           unordered_map<string, string> map;
           while (cin >> key && getline(cin, line))    // fill the map
               map[key] = line;
           cout << ’\n’;

                                               // initialize a support
           vector<decltype(&*map.begin())>     // vector, using ptrIter
               support(ptrIter(map.begin()), ptrIter(map.end()));

                                               // sort ’support’
           typedef unordered_map<string, string>::value_type VT;
           sort(support.begin(), support.end(),
               [&](VT const *p1, VT const *p2)
               {
                   return strcasecmp(p1->first.c_str(), p2->first.c_str()) < 0;
               }
           );

           for(auto &element: support)         // display sorted by key
               cout << element->first << ’ ’ << element->second << ’\n’;
       }

Files

bobcat/ptriter - defines the class interface

Free Function

       o      PtrIter<Iterator>ptrIter(Iteratorconst&iter):
              this  function  template  returns  a  PtrIter  object  for  the function’s Iterator argument. This
              function template simplyfies the construction of a PtrIter as no template parameters  need  to  be
              specified (see also the EXAMPLE section)

Inherits From

std::iterator<std::input_iterator_tag,...>

Member Functions

       All  members of std::iterator<std:::input_iterator_tag,...> are available, as FBB::PtrIter inherits from
       this class.

Name

       FBB::PtrIter - Iterator returning pointer when dereferenced

Namespace

FBB
       All constructors, members, operators and manipulators, mentioned in this man-page,  are  defined  in  the
       namespace FBB.

Overloaded Operators

       o      PtrTypeoperator*()const:
              the address of the entity the iterator refers to is returned;

       o      PtrIter&operator++():
              the iterator is (pre)incremented to the next position;

       o      booloperator==(PtrIterconst&other)const:
              true is returned if the two iterators are equal;

       o      booloperator!=(PtrIterconst&other)const:
              true is returned if the two iterators are unequal;

See Also

bobcat(7)

Synopsis

#include<bobcat/ptriter>

Using Declaration

       The PtrIter class template defines PtrType:

       o      usingPtrType=decltype(&*Iterator()):

See Also