/* The following code example is taken from the book
* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
list<int> coll;
list<int>::iterator pos;
// insert elements from 20 to 40
for (int i=20; i<=40; ++i) {
coll.push_back(i);
}
/* find position of element with value 3
* - there is none, so pos gets coll.end()
*/
pos = find (coll.begin(), coll.end(), // range
3); // value
/* reverse the order of elements between found element and the end
* - because pos is coll.end() it reverses an empty range
*/
reverse (pos, coll.end());
// find positions of values 25 and 35
list<int>::iterator pos25, pos35;
pos25 = find (coll.begin(), coll.end(), // range
25); // value
pos35 = find (coll.begin(), coll.end(), // range
35); // value
/* print the maximum of the corresponding range
* - note: including pos25 but excluding pos35
*/
cout << "max: " << *max_element (pos25, pos35) << endl;
// process the elements including the last position
cout << "max: " << *max_element (pos25, ++pos35) << endl;
}
#include <algorithm>
#include <functional>
#include <iostream>
#include <list>
#include <string>
using namespace std;
class Publication
{
public:
Publication( string first_name = "", string last_name = "", string title = "", string journal = "", int year = 0 );
bool operator<( const Publication& rhs ) const;
// order by date
string last_name() const;
void print() const;
// display publication data
int year() const;
private:
string first_name_;
string journal_;
string last_name_;
string title_;
int year_;
};
inline
Publication::Publication( string first_name, string last_name,
string title, string journal, int year )
: first_name_( first_name ), journal_( journal ),
last_name_( last_name ), title_( title ), year_( year )
{}
inline
bool Publication::operator<( const Publication& rhs ) const
{ return year() < rhs.year(); }
inline
string Publication::last_name() const
{ return last_name_; }
inline
void Publication::print() const
{
cout << last_name() << ", " << first_name_ << endl
<< title_ << endl << journal_ << ", " << year()
<< endl << endl;
}
inline
int Publication::year() const
{ return year_; }
inline
bool equals_last_name( const Publication publication,string last_name )
{ return publication.last_name() == last_name; }
int main( )
{
list<Publication> publication;
publication.push_back( Publication( "A", "B", "C","D", 1999 ) );
publication.push_back( Publication( "E", "F","G","H", 1992 ) );
publication.push_back( Publication( "I", "J","K","L", 1992 ) );
publication.sort();
cout << publication.size() << " PUBLICATIONS\n";
for_each( publication.begin(), publication.end(),mem_fun_ref( &Publication::print ) );
// find earliest publication by Reese
string author( "A" );
list<Publication>::iterator earliest = find_if( publication.begin(), publication.end(), bind2nd( ptr_fun( equals_last_name ), author ) );
// if publication found, display and delete it
if( earliest != publication.end() ) {
cout << "\nEARLIEST PUBLICATION BY " << author << endl;
earliest->print();
publication.erase( earliest );
}
else
cout << "NO PUBLICATIONS BY " << author << endl;
// find latest publication by A
list<Publication>::reverse_iterator latest = find_if( publication.rbegin(), publication.rend(), bind2nd( ptr_fun( equals_last_name ), author ) );
// if publication found, display and delete it
if( latest != publication.rend() ){
cout << "\nLATEST PUBLICATION BY " << author << endl;
latest->print();
publication.erase( --latest.base() );
}
else
cout << "NO PUBLICATIONS BY " << author << endl;
// display all remaining publications
cout << "THERE ARE " << publication.size() << " PUBLICATIONS REMAINING\n";
for_each( publication.begin(), publication.end(), mem_fun_ref( &Publication::print ) );
}
/* The following code example is taken from the book
* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
list<int> coll;
list<int>::iterator pos;
// insert elements from 20 to 40
for (int i=20; i<=40; ++i) {
coll.push_back(i);
}
/* find position of element with value 3
* - there is none, so pos gets coll.end()
*/
pos = find (coll.begin(), coll.end(), // range
3); // value
/* reverse the order of elements between found element and the end
* - because pos is coll.end() it reverses an empty range
*/
reverse (pos, coll.end());
// find positions of values 25 and 35
list<int>::iterator pos25, pos35;
pos25 = find (coll.begin(), coll.end(), // range
25); // value
pos35 = find (coll.begin(), coll.end(), // range
35); // value
/* print the maximum of the corresponding range
* - note: including pos25 but excluding pos35
*/
cout << "max: " << *max_element (pos25, pos35) << endl;
// process the elements including the last position
cout << "max: " << *max_element (pos25, ++pos35) << endl;
}