topical media & game development

talk show tell print

professional-program-22-NonModifyingAlgorithms-ComparisonAlgorithms.c

? / professional-program-22-NonModifyingAlgorithms-ComparisonAlgorithms.c


  include <algorithm>
  include <vector>
  include <list>
  include <iostream>
  using namespace std;
  
  // Function template to populate a container of ints.
  // The container must support push_back().
  template<typename Container>
  void populateContainer(Container& cont)
  {
    int num;
  
    while (true) {
      cout << "Enter a number (0 to quit): ";
      cin >> num;
      if (num == 0) {
        break;
      }
      cont.push_back(num);
    }
  }
  
  int main(int argc, char** argv)
  {
    vector<int> myVector;
    list<int> myList;
  
    cout << "Populate the vector:\n";
    populateContainer(myVector);
    cout << "Populate the list:\n";
    populateContainer(myList);
    if (myList.size() < myVector.size()) {
      cout << "Sorry, the list is not long enough.\n";
      return (0);
    }
  
    // compare the two containers
    if (equal(myVector.begin(), myVector.end(), myList.begin())) {
      cout << "The two containers have equal elements\n";
    } else {
      // If the containers were not equal, find out why not
      pair<vector<int>::iterator, list<int>::iterator> miss =
        mismatch(myVector.begin(), myVector.end(), myList.begin());
      cout << "The first mismatch is at position "
           << miss.first - myVector.begin() << ". The vector has value "
           << *(miss.first) << " and the list has value " << *(miss.second)
           << endl;
    }
  
    // Now order them
    if (lexicographical_compare(myVector.begin(), myVector.end(), myList.begin(),
                                myList.end())) {
      cout << "The vector is lexicographically first.\n";
    } else {
      cout << "The list is lexicographically first.\n";
    }
  
    return (0);
  }
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.