• accum1.cpp
  • accum2.cpp
  • search2.cpp
  • incl2.cpp
  • search1.cpp
  • istmit2.cpp
  • alloc1.cpp
  • release2.cpp
  • map1.cpp
  • mismtch2.cpp
  • mismtch1.cpp
  • mmap2.cpp
  • adjfind2.cpp
  • list3.cpp
  • parsrtc2.cpp
  • vec6.cpp
  • inrprod2.cpp
  • mmap1.cpp
  • adjfind0.cpp
  • parsrt2.cpp
  • mset5.cpp
  • mset1.cpp
  • vec2.cpp
  • uniqcpy2.cpp
  • mismtch0.cpp
  • rndshuf2.cpp
  • merge2.cpp
  • adjfind1.cpp
  • vec7.cpp
  • bcompos1.cpp
  • setsymd2.cpp
  • search0.cpp
  • eqlrnge1.cpp
  • rotcopy1.cpp
  • eqlrnge2.cpp
  • release1.cpp
  • incl1.cpp
  • setintr2.cpp
  • inrprod1.cpp
  • merge1.cpp
  • bcompos2.cpp
  • error3.cpp
  • incl0.cpp
  • setdiff2.cpp
  • setunon2.cpp
  • unique2.cpp
  • parsrtc1.cpp
  • equal1.cpp
  • equal0.cpp
  • genern2.cpp
  • gener2.cpp
  • repcpif1.cpp
  • setsymd.cpp
  • deque1.cpp
  • findif1.cpp
  • ucompos1.cpp
  • rawiter.cpp
  • set2.cpp
  • mset3.cpp
  • binsrch2.cpp
  • nthelem2.cpp
  • setintr1.cpp
  • setdiff1.cpp
  • adjdiff2.cpp
  • rotate1.cpp
  • setunon1.cpp
  • insert1.cpp
  • ucompos2.cpp
  • parsrt1.cpp
  • equal2.cpp
  • inplmrg2.cpp
  • nthelem1.cpp
  • vec4.cpp
  • lwrbnd2.cpp
  • pheap2.cpp
  • insert2.cpp
  • uprbnd2.cpp
  • vec3.cpp
  • iter4.cpp
  • setdiff0.cpp
  • lexcmp2.cpp
  • adjdiff1.cpp
  • stblptn1.cpp
  • ptition1.cpp
  • vec1.cpp
  • sort2.cpp
  • copy4.cpp
  • prevprm2.cpp
  • trnsfrm2.cpp
  • iter1.cpp
  • maxelem2.cpp
  • minelem2.cpp
  • partsum2.cpp
  • istmit1.cpp
  • findif0.cpp
  • pheap1.cpp
  • stblsrt2.cpp
  • nextprm1.cpp
  • prevprm1.cpp
  • rndshuf1.cpp
  • ptrbinf1.cpp
  • iter2.cpp
  • partsum1.cpp
  • replif1.cpp
  • mset4.cpp
  • iter3.cpp
  • list2.cpp
  • set1.cpp
  • list1.cpp
  • alg5.cpp
  • eqlrnge0.cpp
  • advance.cpp
  • replace1.cpp
  • alg3.cpp
  • func2.cpp
  • unegate1.cpp
  • alg4.cpp
  • countif1.cpp
  • lwrbnd1.cpp
  • lexcmp1.cpp
  • copyb.cpp
  • ptrbinf2.cpp
  • copyb0.cpp
  • binsert1.cpp
  • unegate2.cpp
  • revcopy1.cpp
  • finsert1.cpp
  • remcpif1.cpp
  • inplmrg1.cpp
  • list4.cpp
  • revbit1.cpp
  • copy3.cpp
  • merge0.cpp
  • reviter1.cpp
  • find1.cpp
  • trnsfrm1.cpp
  • binsert2.cpp
  • finsert2.cpp
  • mset2.cpp
  • ostmit.cpp
  • ptrunf1.cpp
  • func1.cpp
  • stblptn0.cpp
  • setunon0.cpp
  • mkheap1.cpp
  • setintr0.cpp
  • logicand.cpp
  • logicor.cpp
  • nequal.cpp
  • ptition0.cpp
  • inrprod0.cpp
  • func3.cpp
  • modulus.cpp
  • uprbnd1.cpp
  • equalto.cpp
  • count1.cpp
  • uniqcpy1.cpp
  • minus.cpp
  • replcpy1.cpp
  • swprnge1.cpp
  • vec8.cpp
  • plus.cpp
  • remcopy1.cpp
  • error2.cpp
  • iterswp1.cpp
  • remif1.cpp
  • foreach1.cpp
  • parsrtc0.cpp
  • pqueue2.cpp
  • binsrch1.cpp
  • ptrunf2.cpp
  • rotcopy0.cpp
  • mkheap0.cpp
  • copy1.cpp
  • find0.cpp
  • partsum0.cpp
  • bvec1.cpp
  • bind2nd1.cpp
  • bind1st1.cpp
  • reviter2.cpp
  • copy2.cpp
  • max2.cpp
  • min2.cpp
  • parsrt0.cpp
  • partsrt0.cpp
  • bnegate1.cpp
  • nthelem0.cpp
  • revbit2.cpp
  • count0.cpp
  • negate.cpp
  • pqueue1.cpp
  • genern1.cpp
  • rotate0.cpp
  • foreach0.cpp
  • alg2.cpp
  • gener1.cpp
  • replace0.cpp
  • rndshuf0.cpp
  • bind1st2.cpp
  • unique1.cpp
  • bind2nd2.cpp
  • vec5.cpp
  • iterswp0.cpp
  • remove1.cpp
  • stblsrt1.cpp
  • reverse1.cpp
  • logicnot.cpp
  • bnegate2.cpp
  • queue1.cpp
  • stack1.cpp
  • greateq.cpp
  • stack2.cpp
  • lesseq.cpp
  • divides.cpp
  • greater.cpp
  • swap1.cpp
  • times.cpp
  • less.cpp
  • alg1.cpp
  • filln1.cpp
  • iota1.cpp
  • nextprm0.cpp
  • prevprm0.cpp
  • fill1.cpp
  • pair2.cpp
  • error1.cpp
  • pair0.cpp
  • pair1.cpp
  • minelem1.cpp
  • maxelem1.cpp
  • max1.cpp
  • min1.cpp
  • adjdiff0.cpp
  • ÏÐÈÌÅÐÛ ÏÐÎÃÐÀÌÌ Ñ ØÀÁËÎÍÀÌÈ

    Ýòè ïðèìåðû äåìîíñòðèðóþò èñïîëüçîâàíèå íîâîãî ïðîäóêòà STL ‹ToolKit› îò êîìïàíèè ObjectSpace. STL ‹ToolKit› - ýòî ñàìûé ïðîñòîé ñïîñîá èñïîëüçîâàíèÿ STL, êîòîðûé ðàáîòàåò íà áîëüøèíñòâå êîìáèíàöèé ïëàòôîðì/êîìïèëÿòîðîâ, âêëþ÷àÿ cfront, Borland, Visual C++, Set C++, ObjectCenter è ïîñëåäíèå êîìïèëÿòîðû îò Sun&HP.

    accum1.cpp

    #include ‹ospace/stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v(5);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i + 1;

     int sum = accumulate(v.begin(), v.end(), 0);

     cout ‹‹ "sum = " ‹‹ sum ‹‹ endl;

     return 0;

    }

    accum2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int mult(int initial_, int element_) {

     return initial_ * element_;

    }


    int main() {

     vector‹int› v(5);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i + 1;

     int prod = accumulate(v.begin(), v.end(), 1, mult);

     cout ‹‹ "prod = " ‹‹ prod ‹‹ endl;

     return 0;

    }

    search2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_equal(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) == 0 ? 1:0;

    }


    char* grades[] = {"A", "B", "C", "D", "F"};

    char* letters[] = {"Q", "E", "D"};


    int main() {

     const unsigned gradeCount = sizeof(grades) / sizeof(grades[0]);

     const unsigned letterCount = sizeof(letters) / sizeof(letters[0]);

     ostream_iterator ‹char*› iter(cout, " ");

     cout ‹‹ "grades: ";

     copy(grades, grades + gradeCount, iter);

     cout ‹‹ "\nletters:";

     copy(letters, letters + letterCount, iter);

     cout ‹‹ endl;


     char** location = search(grades, grades + gradeCount, letters, letters + letterCount, str_equal);


     if (location == grades + gradeCount) cout ‹‹ "letters not found in grades" ‹‹ endl;

     else cout ‹‹ "letters found in grades at offset: " ‹‹ location - grades ‹‹ endl;

     copy(grades + 1, grades + 1 + letterCount, letters);


     cout ‹‹ "grades: ";

     copy(grades, grades + gradeCount, iter);

     cout ‹‹ "\nletters:";

     copy(letters, letters + letterCount, iter);

     cout ‹‹ endl;


     location = search(grades, grades + gradeCount, letters, letters + letterCount, str_equal);


     if (location == grades + gradeCount) cout ‹‹ "letters not found in grades" ‹‹ endl;

     else cout ‹‹ "letters found in grades at offset: " ‹‹ location - grades ‹‹ endl;

     return 0;

    }

    incl2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool compare_strings(const char* s1_, const char* s2_) {

     return ::strcmp(s1_, s2_) ‹ 0 ? 1: 0;

    }


    char* names[] = {"Todd", "Mike", "Graham", "Jack", "Brett"};


    int main() {

     const unsigned nameSize = sizeof(names)/sizeof(names[0]);

     vector‹char*› v1(nameSize);

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = names[i];

     }

     vector‹char*› v2(2);

     v2[0] = "foo";

     v2[1] = "bar";

     sort(v1.begin(), v1.end(), compare_strings);

     sort(v2.begin(), v2.end(), compare_strings);


     bool inc = includes(v1.begin(), v1.end(), v2.begin(), v2.end(), compare_strings);

     if (inc) cout ‹‹ "v1 includes v2" ‹‹ endl;

     else cout ‹‹ "v1 does not include v2" ‹‹ endl;

     v2[0] = "Brett";

     v2[1] = "Todd";

     inc = includes(v1.begin(), v1.end(), v2.begin(), v2.end(), compare_strings);

     if (inc) cout ‹‹ "v1 includes v2" ‹‹ endl;

     else cout ‹‹ "v1 does not include v2" ‹‹ endl;

     return 0;

    }

    search1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     typedef vector‹int› IntVec;

     IntVec v1(10);

     iota(v1.begin(), v1.end(), 0);

     IntVec v2(3);

     iota(v2.begin(), v2.end(), 50);

     ostream_iterator‹int› iter(cout, " ");


     cout ‹‹ "v1: ";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     cout ‹‹ "v2: ";

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;


     IntVec::iterator location;

     location = search(v1.begin(), v1.end(), v2.begin(), v2.end());

     if (location == v1.end()) cout ‹‹ "v2 not contained in v1" ‹‹ endl;

     else cout ‹‹ "Found v2 in v1 at offset: " ‹‹ location - v1.begin() ‹‹ endl;


     iota(v2.begin(), v2.end(), 4);

     cout ‹‹ "v1: ";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     cout ‹‹ "v2: ";

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;


     location = search(v1.begin(), v1.end(), v2.begin(), v2.end());

     if (location == v1.end()) cout ‹‹ "v2 not contained in v1" ‹‹ endl;

     else cout ‹‹ "Found v2 in v1 at offset: " ‹‹ location - v1.begin() ‹‹ endl;


    return 0;

    }

    istmit2.cpp

    #include ‹iostream.h›

    #include ‹fstream.h›

    #include ‹stl.h›


    typedef vector‹char› Line;

    void printLine(const Line* line_)  {

     vector‹char›::const_iterator i;

     for (i = line_-›begin(); i!= line_-›end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

    }


    int main() {

     Line buffer;

     vector‹Line*› lines;

     ifstream s("data.txt");

     s.unsetf(ios::skipws); // Disable white-space skipping.

     istream_iterator‹char, ptrdiff_t› it1(s); // Position at start of file.

     istream_iterator‹char, ptrdiff_t› it2; // Serves as "past-the-end" marker.

     copy(it1, it2, back_inserter(buffer));

     Line::iterator i = buffer.begin();

     Line::iterator p;

     while (i != buffer.end()) {

      p = find(i, buffer.end(), '\n');

      lines.push_back(new Line(i, p));

      i = ++p;

     }

     sort(lines.begin(), lines.end(), less_p‹Line*›());

     cout ‹‹ "Read " ‹‹ lines.size() ‹‹ " lines" ‹‹ endl;

     vector‹Line*›::iterator j;

     for(j = lines.begin(); j!= lines.end(); j++) printLine(*j);

     release(lines.begin(), lines.end()); // Release memory.

     return 0;

    }

    alloc1.cpp

    #include ‹stl.h›

    #include ‹ospace/stl/examples/myaloc.h›


    int main() {

     {

      cout ‹‹ "vectors:" ‹‹ endl;

      os_my_allocator‹int› alloc;

      vector‹int› v3(alloc);

      v3.push_back(42);

      vector‹int› v4(alloc);

      v4.push_back(42);

     }

     {

      cout ‹‹ "bit_vectors:" ‹‹ endl;

      os_my_allocator‹unsigned int› alloc;

      bit_vector v1(alloc);

      v1.push_back(1);

     }

     {

      cout ‹‹ "deques:" ‹‹ endl;

      os_my_allocator‹int› alloc;

      deque‹int› d(alloc);

      d.push_back(42);

     }

     {

      cout ‹‹ "lists:" ‹‹ endl;

      os_my_allocator‹os_list_node‹int› › alloc;

      list‹int› l(alloc);

      l.push_back(42);

     }

     {

      cout ‹‹ "sets:" ‹‹ endl;

      os_my_allocator‹os_value_node‹int› › alloc;

      set‹int, less‹int› › s(alloc);

      s.insert(42);

     }

     {

      cout ‹‹ "maps" ‹‹ endl;

      os_my_allocator‹os_value_node‹os_pair‹const int, float› › › alloc;

      map‹int, float, less‹int› › m(alloc);

      m[4] = 2.0;

     }

     return 0;

    }

    release2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    class X {

    public:

     X(int i_): i (i_) {}

     ~X() {cout ‹‹ "Delete X(" ‹‹ i ‹‹ ")" ‹‹ endl;}

     int i;

    };


    ostream& operator ‹‹ (ostream& stream_, const X& x_) {

     return stream_ ‹‹ "X(" ‹‹ x_.i ‹‹ ")";

    }


    int main() {

     vector‹X*› v;

     v.push_back(new X(2));

     v.push_back(new X(1));

     v.push_back(new X(4));

     vector‹X*›::iterator i;

     cout ‹‹ "Initial contents:" ‹‹ endl;

     for (i = v.begin(); i!= v.end(); i++) cout ‹‹ " " ‹‹ *(*i) ‹‹ endl;

     release(v.begin()); // Delete the first heap-based object.

     v.erase(v.begin()); // Erase the first element.

     cout ‹‹ "Remaining contents:" ‹‹ endl;

     for (i = v.begin(); i != v.end(); i++) cout ‹‹ " " ‹‹ *(*i) ‹‹ endl;

     release(v.begin(), v.end()); // Delete remaining heap-based objects.

     v.erase(v.begin(), v.end()); // Erase remaining elements.

     return 0;

    }

    map1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     typedef map‹char, int, less‹char› › maptype;

     maptype m;

     // Store mappings between roman numerals and decimals.

     m['l'] = 50;

     m['x'] = 20; // Deliberate mistake.

     m['v'] = 5;

     m['i'] = 1;

     cout ‹‹ "m['x'] = " ‹‹ m['x'] ‹‹ endl;

     m['x'] = 10; // Correct mistake.

     cout ‹‹ "m['x'] = " ‹‹ m['x'] ‹‹ endl;

     cout ‹‹ "m['z'] = " ‹‹ m['z'] ‹‹ endl; // Note default value is added.

     cout ‹‹ "m.count('z') = " ‹‹ m.count('z') ‹‹ endl;

     pair‹maptype::iterator, bool› p;

     p = m.insert(pair‹const char, int›('c', 100));

     if (p.second) cout ‹‹ "First insertion successful" ‹‹ endl;

     p = m.insert(pair‹const char, int› ('c', 100));

     if (p.second) cout ‹‹ "Second insertion successful" ‹‹ endl;

     else cout ‹‹ "Existing pair " ‹‹ (*(p.first)).first ‹‹ " -› " ‹‹ (*(p.first)).second ‹‹ endl;

     return 0;

    }

    mismtch2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_equal(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) == 0 ? 1: 0;

    }


    const unsigned size = 5;

    char* n1[size] = {"Brett", "Graham", "Jack", "Mike", "Todd"};


    int main() {

     char* n2[size];

     copy(n1, n1 + 5, n2);

     pair‹char**, char**› result;

     result = mismatch(n1, n1+ size, n2, str_equal);

     if (result.first == n1 + size && result.second == n2 + size)

      cout ‹‹ "n1 and n2 are the same" ‹‹ endl;

     else cout ‹‹ "mismatch at index: " ‹‹ (result.first - n1) ‹‹ endl;

     n2[2] = "QED";

     result = mismatch(n1, n1 + size, n2, str_equal);

     if (result.first == n2 + size && result.second == n2 + size)

      cout ‹‹ "n1 and n2 are the same" ‹‹ endl;

     else cout ‹‹ "mismatch at index: " ‹‹ (result.first - n1) ‹‹ endl;

     return 0;

    }

    mismtch1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     typedef vector‹int› IntVec;

     IntVec v1(10);

     IntVec v2(v1.size());

     iota(v1.begin(), v1.end(), 0);

     iota(v2.begin(), v2.end(), 0);

     pair ‹IntVec::iterator, IntVec::iterator› result;

     result = mismatch(v1.begin(), v1.end(), v2.begin());

     if (result.first = v1.end() && result.second == v2.end())

      cout ‹‹ "v1 and v2 are the same" ‹‹ endl;

     else cout ‹‹ "mismatch at index: " ‹‹ (result.first - v1.begin()) ‹‹ endl;

     v2[v2.size()/2] = 42;

     result = mismatch(v1.begin(), v1.end(), v2.begin());

     if (result.first == v1.end() && result.second == v2.end())

      cout ‹‹ "v1 and v2 are the same" ‹‹ endl;

     else cout ‹‹ "mismatch at index: " ‹‹ (result.first - v1.begin()) ‹‹ endl;

    return 0;

    }

    mmap2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    typedef multimap‹int, char, less‹int› › mmap;

    typedef pair‹const int, char› pair_type;


    pair_type p1(3, 'c');

    pair_type p2(6, 'f');

    pair_type p3(1, 'a');

    pair_type p4(2, 'b');

    pair_type p5(3, 'x');

    pair_type p6(6, 'f');


    pair_type array[] = { p1, p2, p3, p4, p5, p6 };


    int main() {

     mmap m(array, array + 7);

     mmap::iterator i;

     // Return location of first element that is not less than 3

     i = m.lower_bound(3);

     cout ‹‹ "lower bound:" ‹‹ endl;

     cout ‹‹ (*i).first ‹‹ " -› " ‹‹ (*i).second ‹‹ endl;

     // Return location of first element that is greater than 3

     i = m.upper_bound(3);

     cout ‹‹ "upper bound:" ‹‹ endl;

     cout ‹‹ (*i).first ‹‹ " -› " ‹‹ (*i).second ‹‹ endl;

     return 0;

    }

    adjfind2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    typedef vector‹char*› CStrVector;


    int equal_length(const char* v1_, const char* v2_) {

     return ::strlen(v1_) == ::strlen(v2_);

    }


    char* names[] = {"Brett", "Graham", "Jack", "Mike", "Todd"};


    int main() {

     const int nameCount = sizeof(names)/sizeof(names[0]);

     CStrVector v(nameCount);

     for (int i = 0; i ‹ nameCount; i++) v[i] = names[i];

     CStrVector::iterator location;

     location = adjacent_find(v.begin(), v.end(), equal_length);

     if (location!= v.end())

      cout ‹‹ "Found two adjacent strings of equal length: " ‹‹ *location

           ‹‹ " -and- " ‹‹ *(location + 1) ‹‹ endl;

     else cout ‹‹ "Didn't find two adjacent strings of equal length.";

     return 0;

    }

    list3.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char array[] = {'x', 'l', 'x', 't', 's', 's'};


    int main() {

     list‹char› str(array, array + 6);

     list‹char›::iterator i;

     cout ‹‹ "original: ";

     for (i = str.begin(); i != str.end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

     cout ‹‹ "reversed: ";

     str.reverse();

     for (i = str.begin(); i != str.end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

     cout ‹‹ "removed: ";

     str.remove('x');

     for (i = str.begin(); i != str.end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

     cout ‹‹ "uniqued: ";

     str.unique();

     for (i = str.begin(); i != str.end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

     cout ‹‹ "sorted: ";

     str.sort();

     for (i = str.begin(); i != str.end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

    return 0;

    }

    parsrtc2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1: 0;

    }


    char* names[] = {"aa", "ff", "dd", "ee", "cc", "bb"};


    int main() {

     const unsigned nameSize = sizeof(names) / sizeof(names[0]);

     vector‹char*› v1(nameSize);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = names[i];

     ostream_iterator‹char*› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     vector‹char*› result(5);

     partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end(), str_compare);

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    vec6.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 4, 9, 16, 25, 36};


    int main() {

     vector‹int› v(array, array + 6);

     for (int i = 0; i ‹ v.size(); i++) cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     cout ‹‹ endl;

     v.erase(v.begin()); // Erase first element.

     for (i = 0; i ‹ v.size(); i++) cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     cout ‹‹ endl;

     v.erase(v.end() - 1); // Erase last element.

     for (i = 0; i ‹ v.size(); i++) cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     cout ‹‹ endl;

     v.erase(v.begin() + 1, v.end() - 1); // Erase all but first and last.

     for (i = 0; i ‹ v.size(); i++)

     cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     cout ‹‹ endl;

     v.erase(); // Erase all.

     return 0;

    }

    inrprod2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    int add(int a_, int b_) {

     return a_ + b_;

    }


    int mult(int a_, int b_) {

     return a_ * b_;

    }


    int main() {

     vector‹int› v1(3);

     vector‹int› v2(v1.size());

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = i + 1;

      v2[i] = v1.size() - i;

     }

     ostream_iterator‹int› iter(cout, " ");

     cout ‹‹ "Inner product(product of sums):\n\t";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ "\n\t";

     copy(v2.begin(), v2.end(), iter);

     int result = inner_product(v1.begin(), v1.end(), v2.begin(), 1, mult, add);

     cout ‹‹ "\nis: " ‹‹ result ‹‹ endl;

     return 0;

    }

    mmap1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     typedef multimap‹char, int, less‹char› › mmap;

     mmap m;

     cout ‹‹ "count('X') = " ‹‹ m.count('X') ‹‹ endl;

     m.insert(pair‹const char, int›('X', 10)); // Standard way.

     cout ‹‹ "count('X') = " ‹‹ m.count('X') ‹‹ endl;

     m.insert('X', 20); // Non-standard, but very convenient!

     cout ‹‹ "count('X') = " ‹‹ m.count('X') ‹‹ endl;

     m.insert('Y', 32);

     mmap::iterator i = m.find('X'); // Find first match.

     while (i != m.end()) { // Loop until end is reached.

      cout ‹‹ (*i).first ‹‹ " -› " ‹‹ (*i).second ‹‹ endl;

      i++;

     }

     int count = m.erase('X');

     cout ‹‹ "Erased " ‹‹ count ‹‹ " items" ‹‹ endl;

     return 0;

    }

    adjfind0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers1[5] = {1, 2, 4, 8, 16};

    int numbers2[5] = {5, 3, 2, 1, 1};


    int main() {

     int* location = adjacent_find(numbers1, numbers1 + 5);


     if (location != numbers1 + 5)

      cout ‹‹ "Found adjacent pair of: " ‹‹ *location ‹‹ " at offset " ‹‹ (location - numbers1) ‹‹ endl;

     else cout ‹‹ "No adjacent pairs" ‹‹ endl;

     location = adjacent_find(numbers2, numbers2 + 5);

     if (location != numbers2 + 5)

      cout ‹‹ "Found adjacent pair of: " ‹‹ *location ‹‹ " at offset " ‹‹ (location - numbers2) ‹‹ endl;

     else cout ‹‹ "No adjacent pairs" ‹‹ endl;

     return 0;

    }

    parsrt2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1: 0;

    }


    char* names[] = {"aa", "ff", "dd", "ee", "cc", "bb"};


    int main() {

     const unsigned nameSize = sizeof(names) / sizeof(names[0]);

     vector‹char*› v1(nameSize);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = names[i];

     ostream_iterator‹char*› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     partial_sort(v1.begin(), v1.begin() + nameSize/2, v1.end(), str_compare);

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    mset5.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool less_than(int a_, int b_) {

     return a_ ‹ b_;

    }

    bool greater_than(int a_, int b_) {

     return a_ › b_;

    }

    int array[] = {3, 6, 1, 9};


    int main() {

     typedef pointer_to_binary_function‹int, int, bool› fn_type;

     typedef multiset‹int, fn_type› mset;

     fn_type f(less_than);

     mset s1(array, array + 4, f);

     mset::const_iterator i = s1.begin();

     cout ‹‹ "Using less_than: " ‹‹ endl;

     while (i != s1.end()) cout ‹‹ *i++ ‹‹ endl;

     fn_type g(greater_than);

     mset s2(array, array + 4, g);

     i = s2.begin();

     cout ‹‹ "Using greater_than: " ‹‹ endl;

     while (i != s2.end()) cout ‹‹ *i++ ‹‹ endl;

     return 0;

    }

    mset1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     typedef multiset‹int, less‹int› › mset;

     mset s;

     cout ‹‹ "count(42) = " ‹‹ s.count(42) ‹‹ endl;

     s.insert(42);

     cout ‹‹ "count(42) = " ‹‹ s.count(42) ‹‹ endl;

     s.insert(42);

     cout ‹‹ "count(42) = " ‹‹ s.count(42) ‹‹ endl;

     set‹int, less‹int› ›::iterator i = s.find(40);

     if (i == s.end()) cout ‹‹ "40 Not found" ‹‹ endl;

     else cout ‹‹ "Found " ‹‹ *i ‹‹ endl;

     i = s.find(42);

     if (i == s.end()) cout ‹‹ "Not found" ‹‹ endl;

     else cout ‹‹ "Found " ‹‹ *i ‹‹ endl;

     int count = s.erase(42);

     cout ‹‹ "Erased " ‹‹ count ‹‹ " instances" ‹‹ endl;

     return 0;

    }

    vec2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    void print(vector‹double›& vector_) {

     for (int i = 0; i ‹ vector_.size(); i++)

     cout ‹‹ vector_[i] ‹‹ " ";

     cout ‹‹ endl;

    }


    int main() {

     vector‹double› v1; // Empty vector of doubles.

     v1.push_back(32.1);

     v1.push_back(40.5);

     vector‹double› v2; // Another empty vector of doubles.

     v2.push_back(3.56);

     cout ‹‹ "v1 = ";

     print(v1);

     cout ‹‹ "v2 = ";

     print(v2);

     v1.swap(v2); // Swap the vector's contents.

     cout ‹‹ "v1 = ";

     print(v1);

     cout ‹‹ "v2 = ";

     print(v2);

     v2 = v1; // Assign one vector to another.

     cout ‹‹ "v2 = ";

     print(v2);

     return 0;

    }

    uniqcpy2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_equal(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) - 0 ? 1: 0;

    }


    char* labels[] = {"Q","Q","W","W","E","E","R","T","T","Y","Y"};


    int main() {

     const unsigned count = sizeof(labels) / sizeof(labels[0]);

     ostream_iterator ‹char*› iter(cout);

     copy(labels, labels + count, iter);

     cout ‹‹ endl;

     char* uCopy[count];

     fill(uCopy, uCopy + count, ");

     unique_copy(labels, labels + count, uCopy, str_equal);

     copy(labels, labels + count, iter);

    cout ‹‹ endl;

    copy(uCopy, uCopy + count, iter);

    cout ‹‹ endl;

    return 0;

    }

    mismtch0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int n1[5] = {1, 2, 3, 4, 5};

    int n2[5] = {1, 2, 3, 4, 5};

    int n3[5] = {1, 2, 3, 2, 1};


    int main() {

     pair ‹int*, int*› result;

     result = mismatch(n1, n1 + 5, n2);

     if (result.first == (n1 + 5) && result.second == (n2 + 5))

      cout ‹‹ "n1 and n2 are the same" ‹‹ endl;

     else cout ‹‹ "Mismatch at offset: " ‹‹ (result.first - n1) ‹‹ endl;

     result = mismatch(n1, n1 + 5, n3);

     if (result.first == (n1 + 5) && result.second == (n3 + 5))

      cout ‹‹ "n1 and n3 are the same" ‹‹ endl;

     else cout ‹‹ "Mismatch at offset: " ‹‹ (result.first - n1) ‹‹ endl;

     return 0;

    }

    rndshuf2.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    class MyRandomGenerator {

    public:

     nsigned long operator()(unsigned long n_);

    };


    unsigned long MyRandomGenerator::operator()(unsigned long n_) {

     return rand() % n_;

    }


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     ostream_iterator ‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     MyRandomGenerator r;

     for (int i = 0; i ‹ 3; i++) {

      random_shuffle(v1.begin(), v1.end(), r);

      copy(v1.begin(), v1.end(), iter);

      cout ‹‹ endl;

     }

     return 0;

    }

    merge2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(5);

     vector‹int› v2(v1.size());

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = 10 - i;

      v2[i] = 7 - i;

     }

     vector‹int› result(v1.size() + v2.size());

     merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin(), greater‹int›());

     ostream_iterator ‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     copy(result.begin(), result.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    adjfind1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     typedef vector‹int› IntVector;

     IntVector v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i;

     IntVector::iterator location;

     location = adjacent_find(v.begin(), v.end());

     if (location != v.end()) cout ‹‹ "Found adjacent pair of: " ‹‹ *location ‹‹ endl;

     else cout ‹‹ "No adjacent pairs" ‹‹ endl;

     v[6] = 7;

     location = adjacent_find(v.begin(), v.end());

     if (location!= v.end())  cout ‹‹ "Found adjacent pair of: " ‹‹ *location ‹‹ endl;

     else cout ‹‹ "No adjacent pairs" ‹‹ endl;

     return 0;

    }

    vec7.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array1[] = {1, 4, 25};

    int array2[] = {9, 16};


    int main() {

     vector‹int› v(array1, array1 + 3);

     v.insert(v.begin(), 0); // Insert before first element.

     v.insert(v.end(), 36); // Insert after last element.

     for (int i = 0; i ‹ v.size(); i++) cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     cout ‹‹ endl;

     // Insert contents of array2 before fourth element.

     v.insert(v.begin() + 3, array2, array2 + 2);

     for (i = 0; i ‹ v.size(); i++)

     cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     cout ‹‹ endl;

     return 0;

    }

    bcompos1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    struct odd: public unary_function‹int, bool› {

     odd() {}

     bool operator() (int n_) const {return (n_ % 2) - 1;}

    };

    struct positive: public unary_function‹int, bool› {

     positive() {}

     bool operator() (int n_) const {return n_ ›= 0;}

    };


    int array[6] = {-2, -1, 0, 1, 2, 3};


    int main() {

     binary_compose‹logical_and‹bool›, odd, positive› b(logical_and‹bool›(), odd(), positive());

     int* p = find_if(array, array + 6, b);

     if (p != array + 6) cout ‹‹ *p ‹‹ " is odd and positive" ‹‹ endl;

     return 0;

    }

    setsymd2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char* word1 = "ABCDEFGHIJKLMNO";

    char* word2 = "LMNOPQRSTUVWXYZ";


    int main() {

     ostream_iterator‹char› iter(cout, " ");

     cout ‹‹ "word1: ";

     copy(word1, word1 + ::strlen(word1), iter);

     cout ‹‹ "\nword2: ";

     copy(word2, word2 + ::strlen(word2), iter);

     cout ‹‹ endl;

     set_symmetric_difference(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2), iter, less‹char›());

     cout ‹‹ endl;

     return 0;

    }

    search0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[6] = {1, 1, 2, 3, 5, 8};

    int v2[6] = {0, 1, 2, 3, 4, 5};

    int v3[2] = {3, 4};


    int main() {

     int* location;

     location = search(v1, v1 + 6, v3, v3 + 2);

     if (location == v1 + 6) cout ‹‹ "v3 not contained in v1" ‹‹ endl;

     else cout ‹‹ "Found v3 in v1 at offset: " ‹‹ location - v1 ‹‹ endl;

     location = search(v2, v2 + 6, v3, v3 + 2);

     if (location == v2 + 6) cout ‹‹ "v3 not contained in v2" ‹‹ endl;

     else cout ‹‹ "Found v3 in v2 at offset: " ‹‹ location - v2 ‹‹ endl;

     return 0;

    }

    eqlrnge1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     typedef vector‹int› IntVec;

     IntVec v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i / 3;  ostream_iterator‹int› iter(cout, " ");

     cout ‹‹ "Within the collection:\n\t";

     copy(v.begin(), v.end(), iter);

     pair‹IntVec::iterator, IntVec::iterator› range;

     range = equal_range(v.begin(), v.end(), 2);

     cout ‹‹ "\n2 can be inserted from before index " ‹‹ (range.first - v.begin())

          ‹‹ " to before index " ‹‹ (range.second - v.begin()) ‹‹ endl;

     return 0;

    }

    rotcopy1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

    vector‹int› v1(10);

    iota(v1.begin(), v1.end(), 0);

    ostream_iterator ‹int› iter(cout, " ");

    copy(v1.begin(), v1.end(), iter);

    cout ‹‹ endl;

    vector‹int› v2(v1.size());

    for (int i = 0; i ‹ v1.size(); i++) {

     rotate_copy(v1.begin(), v1.begin() + i, v1.end(), v2.begin());

     ostream_iterator‹int› iter(cout, " ");

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

    }

    cout ‹‹ endl;

    return 0;

    }

    eqlrnge2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char chars[] = "aabbccddggghhklllmqqqqssyyzz";


    int main() {

     const unsigned count = sizeof(chars) - 1;

     ostream_iterator‹char› iter(cout);

     cout ‹‹ "Within the collection:\n\t";

     copy(chars, chars + count, iter);

     pair‹char*, char*› range;

     range = equal_range(chars, chars + count, 'q', less‹char›());

     cout ‹‹ "\nq can be inserted from before index " ‹‹ (range.first - chars) ‹‹ " to before index "

          ‹‹ (range.second - chars) ‹‹ endl;

     return 0;

    }

    release1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    class X {

    public:

     X(int i_): i(i_) {}

     ~X() {cout ‹‹ "Delete X(" ‹‹ i ‹‹ ")" ‹‹ endl;}

     int i;

    };


    ostream& operator ‹‹ (ostream& stream_, const X& x_) {

     return stream_ ‹‹ "X(" ‹‹ x_.i ‹‹ ")";

    }


    int main() {

     vector‹X*› v;

     v.push_back(new X(2));

     v.push_back(new X(1));

     v.push_back(new X(4));

     vector‹X*›::iterator i;

     for (i = v.begin(); i!= v.end(); i++) cout ‹‹ *(*i) ‹‹ endl;

     release(v.begin(), v.end()); // Delete heap-based objects.

     return 0;

    }

    incl1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     vector‹int› v2(3);

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = i;

     }

     if (includes(v1.begin(), v1.end(), v2.begin(), v2.end())) cout ‹‹ "v1 includes v2" ‹‹ endl;

     else cout ‹‹ "v1 does not include v2" ‹‹ endl;

     for (i = 0; i ‹ v2.size(); i++) v2[i] = i + 3;

     if (includes(v1.begin(), v1.end(), v2.begin(), v2.end())) cout ‹‹ "v1 includes v2" ‹‹ endl;

     else cout ‹‹ "v1 does not include v2" ‹‹ endl;

     return 0;

    }

    setintr2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char* word1 = "ABCDEFGHIJKLMNO";

    char* word2 = "LMNOPQRSTUVWXYZ";


    int main() {

     ostream_iterator ‹char› iter(cout, " ");

     cout ‹‹ "word1: ";

     copy(word1, word1 + ::strlen(word1), iter);

     cout ‹‹ "\nword2: ";

     copy(word2, word2 + ::strlen(word2), iter);

     cout ‹‹ endl;

     set_intersection(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2), iter, less‹char›());

     cout ‹‹ endl;

     return 0;

    }

    inrprod1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    int main() {

     vector‹int› v1(3);

     vector‹int› v2(v1.size());

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = i + 1;

      v2[i] = v1.size() - i;

     }

     ostream_iterator‹int› iter(cout, " ");

     cout ‹‹ "Inner product(sum of products) of:\n\t";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ "\n\t";

     copy(v2.begin(), v2.end(), iter);

     int result = inner_product(v1.begin(), v1.end(), v2.begin(), 0);

    cout ‹‹ "\nis: " ‹‹ result ‹‹ endl;

    return 0;

    }

    merge1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(5);

     vector‹int› v2(v1.size());

     iota(v1.begin(), v1.end(), 0);

     iota(v2.begin(), v2.end(), 3);

     vector‹int› result(v1.size() + v2.size());

     merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     copy(result.begin(), result.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    bcompos2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    struct odd: public unary_function‹int, bool› {

     odd() {}

     bool operator() (int n_) const  {return (n_ % 2) - 1;}

    };

    struct positive: public unary_function‹int, bool› {

     positive() {}

     bool operator() (int n_) const  {return n_ ›= 0;}

    };


    int array[6] = {-2, -1, 0, 1, 2, 3};


    int main() {

     int* p = find_if(array, array + 6, compose2(logical_and‹bool›(), odd(), positive()));

     if (p != array + 6) cout ‹‹ *p ‹‹ " is odd and positive" ‹‹ endl;

     return 0;

    }

    error3.cpp

    #include ‹stl.h›


    // Compile this code without defining OS_USE_EXCEPTIONS.

    void my_handler(int code_, const char* str_) {

     cout ‹‹ "Caught " ‹‹ str_ ‹‹ "[code " ‹‹ code_ ‹‹ "]" ‹‹ endl;

    }


    int main() {

     os_handler_function_t old_h = os_set_error_handler(my_handler);

     vector‹int› v;

     v.pop_back(); // Generates an empty object error.

     cout ‹‹ "returned from pop_back()" ‹‹ endl;

     os_set_error_handler(old_h);

     v.pop_back(); // Generates an empty object error.

     cout ‹‹ "successful termination" ‹‹ endl;

     return 0;

    }

    incl0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers1[5] = {1, 2, 3, 4, 5};

    int numbers2[5] = {1, 2, 4, 8, 16};

    int numbers3[2] = {4, 8};


    int main() {

     if (includes(numbers1, numbers1 + 5, numbers3, numbers3 + 2))

      cout ‹‹ "numbers1 includes numbers3" ‹‹ endl;

     else cout ‹‹ "numbers1 does not include numbers3" ‹‹ endl;

     if (includes(numbers2, numbers2 + 5, numbers3, numbers3 + 2))

      cout ‹‹ "numbers2 includes numbers3" ‹‹ endl;

     else cout ‹‹ "numbers2 does not include numbers3" ‹‹ endl;

     return 0;

    }

    setdiff2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char* word1 = "ABCDEFGHIJKLMNO";

    char* word2 = "LMNOPQRSTUVWXYZ";


    int main() {

     ostream_iterator‹char› iter(cout, " ");

     cout ‹‹ "word1: ";

     copy(word1, word1 + ::strlen(word1), iter);

     cout ‹‹ "\nword2: ";

     copy(word2, word2 + ::strlen(word2), iter);

     cout ‹‹ endl;

     set_difference(word1, word1 + ::strlen(word1),  word2, word2 + ::strlen(word2), iter, less‹char›());

     cout ‹‹ endl;

     return 0;

    }

    setunon2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char* word1 = "ABCDEFGHIJKLMNO";

    char* word2 = "LMNOPQRSTUVWXYZ";


    int main() {

     ostream_iterator‹char› iter(cout, " ");

     cout ‹‹ "word1: ";

     copy(word1, word1 + ::strlen(word1), iter);

     cout ‹‹ "\nword2: ";

     copy(word2, word2 + ::strlen(word2), iter);

     cout ‹‹ endl;

     set_union(word1, word1 + ::strlen(word1),  word2, word2 + ::strlen(word2), iter, less‹char›());

     cout ‹‹ endl;

     return 0;

    }

    unique2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_equal(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) == 0 ? 1: 0;

    }


    char* labels[] = {"Q","Q","W","W","E","E","R","T","T","Y","Y"};


    int main() {

     const unsigned count = sizeof(labels) / sizeof(labels[0]);

     ostream_iterator‹char*› iter(cout);

     copy(labels, labels + count, iter);

     cout ‹‹ endl;

     unique(labels, labels + count, str_equal);

     copy(labels, labels + count, iter);

     cout ‹‹ endl;

     return 0;

    }

    parsrtc1.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = rand() % 10;

     vector‹int› result(5);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     partial_sort_copy(v1.begin(), v1.end(), result.begin(), result.end());

     copy(result.begin(), result.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    equal1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = i;

     vector‹int› v2(10);

     if (equal(v1.begin(), v1.end(), v2.begin())) cout ‹‹ "v1 is equal to v2" ‹‹ endl;

     else cout ‹‹ "v1 is not equal to v2" ‹‹ endl;

     copy(v1.begin(), v1.end(), v2.begin());

     if (equal(v1.begin(), v1.end(), v2.begin())) cout ‹‹ "v1 is equal to v2" ‹‹ endl;

     else cout ‹‹ "v1 is not equal to v2" ‹‹ endl;

     return 0;

    }

    equal0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers1[5] = {1, 2, 3, 4, 5};

    int numbers2[5] = {1, 2, 4, 8, 16};

    int numbers3[2] = {1, 2};


    int main() {

     if (equal(numbers1, numbers1 + 5, numbers2))

      cout ‹‹ "numbers1 is equal to numbers2" ‹‹ endl;

     else cout ‹‹ "numbers1 is not equal to numbers2" ‹‹ endl;

     if (equal(numbers3, numbers3 + 2, numbers1))

      cout ‹‹ "numbers3 is equal to numbers1" ‹‹ endl;

     else cout ‹‹ "numbers3 is not equal to numbers1" ‹‹ endl;

     return 0;

    }

    genern2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹stdlib.h›


    class Fibonacci {

    public:

     Fibonacci(): v1(0), v2(1) {}

     int operator() ();

    private:

     int v1;

     int v2;

    };


    int Fibonacci::operator() () {

     int r = v1 + v2;

     v1 = v2;

     v2 = r;

     return v1;

    }


    int main() {

     vector‹int› v1(10);

     Fibonacci generator;

     generate_n(v1.begin(), v1.size(), generator);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    gener2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹stdlib.h›


    class Fibonacci {

    public:

     Fibonacci(): v1(0), v2(1) {}

     int operator() ();

     private:

     int v1;

     int v2;

    };


    int Fibonacci::operator() () {

     int r = v1 + v2;

     v1 = v2;

     v2 = r;

     return v1;

    }


    int main() {

     vector‹int› v1(10);

     Fibonacci generator;

     generate(v1.begin(), v1.end(), generator);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    repcpif1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool odd(int a_) {

     return a_ % 2;

    }


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = i % 5;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     vector‹int› v2(v1.size());

     replace_copy_if(v1.begin(), v1.end(), v2.begin(), odd, 42);

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    setsymd.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[3] = {13, 18, 23};

    int v2[4] = {10, 13, 17, 23};

    int result[4] = {0, 0, 0, 0};


    int main() {

     set_symmetric_difference(v1, v1 + 3, v2, v2 + 4, result);

     for (int i = 0; i ‹ 4; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    deque1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     deque‹int› d;

     d.push_back(4); // Add after end.

     d.push_back(9);

     d.push_back(16);

     d.push_front(1); // Insert at beginning.

     for (int i = 0; i ‹ d.size(); i++) cout ‹‹ "d[" ‹‹ i ‹‹ "] = " ‹‹ d[i] ‹‹ endl;

     cout ‹‹ endl;

     d.pop_front(); // Erase first element.

     d[2] = 25; // Replace last element.

     for (i = 0; i ‹ d.size(); i++)

     cout ‹‹ "d[" ‹‹ i ‹‹ "] = " ‹‹ d[i] ‹‹ endl;

     return 0;

    }

    findif1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool div_3(int a_) {

     return a_ % 3 ? 0 : 1;

    }


    int main() {

     typedef vector‹int› IntVec;

     IntVec v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = (i + 1) * (i + 1);

     IntVec::iterator iter;

     iter = find_if(v.begin(), v.end(), div_3);

     if (iter!= v.end())

      cout ‹‹ "Value " ‹‹ *iter ‹‹ " at offset " ‹‹ (iter - v.begin()) ‹‹ " is divisible by 3" ‹‹ endl;

     return 0;

    }

    ucompos1.cpp

    #include ‹iostream.h›

    #include ‹math.h›

    #include ‹stl.h›


    struct square_root: public unary_function‹double, double› {

     square_root() {}

     double operator() (double x_) const {return sqrt(x_);}

    };


    int input[3] = {-1, -4, -16};


    int main() {

     int output[3];

     transform(input, input + 3, output, unary_compose‹square_root, negate‹int› ›(square_root(), negate‹int›()));

     for (int i = 0; i ‹ 3; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    rawiter.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    class X {

    public:

     X(int i_ = 0): i (i_) {}

     operator int() const {return i;}

    private:

     int i;

    };


    int main() {

     os_heap_allocator‹X› a;

     // Allocate (but do not construct) storage for 5 elements.

      os_heap_allocator‹X›::pointer p = a.allocate(5);

     raw_storage_iterator‹X*, X› r(p);

     for (int i = 0; i ‹ 5; i++) *r++ = X(i);

     for (i = 0; i ‹ 5; i++) cout ‹‹ *p++ ‹‹ endl;

     return 0;

    }

    set2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     set‹int, less‹int› › s;

     pair‹set‹int, less‹int› ›::const_iterator, bool› p;

     p = s.insert(42);

     if (p.second) cout ‹‹ "Inserted new element " ‹‹ *(p.first) ‹‹ endl;

     else cout ‹‹ "Existing element = " ‹‹ *(p.first) ‹‹ endl;

     p = s.insert(42);

     if (p.second) cout ‹‹ "Inserted new element " ‹‹ *(p.first) ‹‹ endl;

     else cout ‹‹ "Existing element = " ‹‹ *(p.first) ‹‹ endl;

     return 0;

    }

    mset3.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {3, 6, 1, 2, 3, 2, 6, 7, 9};


    int main() {

     multiset‹int, less‹int› › s(array, array + 9);

     multiset‹int, less‹int› ›::iterator i;

     // Return location of first element that is not less than 3

     i = s.lower_bound(3);

     cout ‹‹ "lower bound = " ‹‹ *i ‹‹ endl;

     // Return location of first element that is greater than 3

     i = s.upper_bound(3);

     cout ‹‹ "upper bound = " ‹‹ *i ‹‹ endl;

     return 0;

    }

    binsrch2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹  0 ? 1 : 0;

    }


    char* labels[] = {"aa", "dd", "ff", "jj", "ss", "zz"};


    int main() {

     const unsigned count = sizeof(labels) / sizeof(labels[0]);

     if (binary_search(labels, labels + count, "ff", str_compare)) cout ‹‹ "ff is in labels." ‹‹ endl;

     else cout ‹‹ "ff is not in labels." ‹‹ endl;

     return 0;

    }

    nthelem2.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = rand() % 10;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     nth_element(v1.begin(), v1.begin() + v1.size() / 2, v1.end(), greater‹int›());

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    setintr1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     vector‹int› v2(10);

     iota(v2.begin(), v2.end(), 7);

     ostream_iterator ‹int› iter(cout, " ");

     cout ‹‹ "v1: ";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ "\nv2: ";

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    setdiff1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     vector‹int› v2(10);

     iota(v2.begin(), v2.end(), 7);

     ostream_iterator ‹int› iter(cout, " ");

     cout ‹‹ "v1: ";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ "\nv2: ";

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    adjdiff2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int mult(int a_, int b_) {

     return a_ * b_;

    }


    int main() {

     vector‹int› v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i + 1;

     vector‹int› rslt(v.size());

     adjacent_difference(v.begin(), v.end(), rslt.begin(), mult);

     ostream_iterator‹int› iter(cout, " ");

     copy(v.begin(), v.end(), iter);

     cout ‹‹ endl;

     copy(rslt.begin(), rslt.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    rotate1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     for (int i = 0; i ‹ v1.size(); i++) {

      rotate(v1.begin(), v1.begin() + i, v1.end());

     ostream_iterator ‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

    }

    cout ‹‹ endl;

    return 0;

    }

    setunon1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     vector‹int› v2(10);

     iota(v2.begin(), v2.end(), 7);

     ostream_iterator‹int› iter(cout, " ");

     cout ‹‹ "v1: ";

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ "\nv2: ";

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    insert1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* array1[] = {"laurie", "jennifer", "leisa"};

    char* array2[] = {"amanda", "saskia", "carrie"};


    int main() {

     deque‹char*› names(array1, array1 + 3);

     deque‹char*›::iterator i = names.begin() + 2;

     copy(array2, array2 + 3, insert_iterator‹deque ‹char*› ›(names, i));

     deque‹char*›::iterator j;

     for (j = names.begin(); j!= names.end(); j++) cout ‹‹ *j ‹‹ endl;

     return 0;

    }

    ucompos2.cpp

    #include ‹iostream.h›

    #include ‹math.h›

    #include ‹stl.h›


    struct square_root: public unary_function‹double, double› {

     square_root() {}

     double operator() (double x_) const {return sqrt(x_);}

    };


    int input[3] = {-1, -4, -16};


    int main() {

     int output[3];

     transform(input, input + 3, output, compose1(square_root(), negate‹int›()));

     for (int i = 0; i ‹ 3; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    parsrt1.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++)

     v1[i] = rand() % 10;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     partial_sort(v1.begin(), v1.begin() + v1.size() / 2, v1.end());

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    equal2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool values_squared(int a_, int b_) {

     return (a_ * a_ == b_);

    }


    int main() {

     vector‹int› v1(10);

     vector‹int› v2(10);

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = i;

      v2[i] = i * i;

     }

     if (equal(v1.begin(), v1.end(), v2.begin(), values_squared))

      cout ‹‹ "v2[i] == v1[i] * v1[i]" ‹‹ endl;

     else cout ‹‹ "v2[i] != v1[i] * v1[i]" ‹‹ endl;

     return 0;

    }

    inplmrg2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = (v1.size() - i - 1) % 5;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     inplace_merge(v1.begin(), v1.begin() + 5, v1.end(), greater‹int›());

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    nthelem1.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = rand() % 10;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     nth_element(v1.begin(), v1.begin() + v1.size() / 2, v1.end());

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    vec4.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int› v(4);

     v[0] = 1;

     v[1] = 4;

     v[2] = 9;

     v[3] = 16;

     cout ‹‹ "front = " ‹‹ v.front() ‹‹ endl;

     cout ‹‹ "back = " ‹‹ v.back() ‹‹ ", size = " ‹‹ v.size() ‹‹ endl;

     v.push_back(25);

     cout ‹‹ "back = " ‹‹ v.back() ‹‹ ", size = " ‹‹ v.size() ‹‹ endl;

     v.pop_back();

     cout ‹‹ "back = " ‹‹ v.back() ‹‹ ", size = " ‹‹ v.size() ‹‹ endl;

     return 0;

    }

    lwrbnd2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool char_str_less(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    char* str[] = {"a", "a", "b", "b", "q", "w", "z"};


    int main() {

     const unsigned strCt = sizeof(str)/sizeof(str[0]);

     cout ‹‹ "d can be inserted at index: "

      ‹‹ (lower_bound(str, str + strCt, "d", char_str_less) - str) ‹‹ endl;

     return 0;

    }

    pheap2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v;


     v.push_back(1);

     v.push_back(20);

     v.push_back(4);

     make_heap(v.begin(), v.end(), greater‹int›());


     v.push_back(7);

     push_heap(v.begin(), v.end(), greater‹int›());


     sort_heap(v.begin(), v.end(), greater‹int›());

     ostream_iterator‹int› iter(cout, " ");

     copy(v.begin(), v.end(), iter);

     cout ‹‹ endl;


     return 0;

    }

    insert2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* array1[] = {"laurie", "jennifer", "leisa"};

    char* array2[] = {"amanda", "saskia", "carrie"};


    int main() {

     deque‹char*› names(array1, array1 + 3);

     deque‹char*›::iterator i = names.begin() + 2;

     copy(array2, array2 + 3, inserter(names, i));

     deque‹char*›::iterator j;

     for (j = names.begin(); j!= names.end(); j++) cout ‹‹ *j ‹‹ endl;

     return 0;

    }

    uprbnd2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool char_str_less(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    char* str[] = {"a", "a", "b", "b", "q", "w", "z"};


    int main() {

     const unsigned strCt = sizeof(str)/sizeof(str[0]);

     cout ‹‹ "d can be inserted at index: "

      ‹‹ upper_bound(str, str + strCt, "d", char_str_less) - str ‹‹ endl;

     return 0;

    }

    vec3.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹char› v1; // Empty vector of characters.

     v1.push_back('h');

     v1.push_back('i');

     cout ‹‹ "v1 = " ‹‹ v1[0] ‹‹ v1[1] ‹‹ endl;

     vector‹char› v2(v1);

     v2[1] = 'o'; // Replace second character.

     cout ‹‹ "v2 = " ‹‹ v2[0] ‹‹ v2[1] ‹‹ endl;

     cout ‹‹ "(v1 == v2) = " ‹‹ (v1 == v2) ‹‹ endl;

     cout ‹‹ "(v1 ‹ v2) = " ‹‹ (v1 ‹ v2) ‹‹ endl;

     return 0;

    }

    iter4.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int› v; // Empty vector of integers.

     v.push_back(1);

     v.push_back(2);

     v.push_back(3);

     // Position immediately after last item.

     vector‹int›::iterator i = v.end();

     // Move back one and then access.

      cout ‹‹ "last element is " ‹‹ *--i ‹‹ endl;

     i -= 2; // Jump back two items.

     cout ‹‹ "first element is " ‹‹ *i ‹‹ endl;

     return 0;

    }

    setdiff0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[3] = {13, 18, 23};

    int v2[4] = {10, 13, 17, 23};

    int result[4] = {0, 0, 0, 0};


    int main() {

     set_difference(v1, v1 + 3, v2, v2 + 4, result);

     for (int i = 0; i ‹ 4; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     set_difference(v2, v2 + 4, v1, v1 + 2, result);

     for (i = 0; i ‹ 4; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

    return 0;

    }

    lexcmp2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    const unsigned size = 6;

    char n1[size] = "shoe";

    char n2[size] = "shine";


    int main() {

     bool before = lexicographical_compare(n1, n1 + size, n2, n2 + size, greater‹char›());

     if (before) cout ‹‹ n1 ‹‹ " is after " ‹‹ n2 ‹‹ endl;

     else cout ‹‹ n2 ‹‹ " is after " ‹‹ n1 ‹‹ endl;

     return 0;

    }

    adjdiff1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i * i;

     vector‹int› result(v.size());

     adjacent_difference(v.begin(), v.end(), result.begin());

     ostream_iterator‹int› iter(cout, " ");

     copy(v.begin(), v.end(), iter);

     cout ‹‹ endl;

     copy(result.begin(), result.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    stblptn1.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = rand() % 20;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     stable_partition(v1.begin(), v1.end(), bind2nd(less‹int›(), 11));

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    ptition1.cpp

    #include ‹stl.h›

    #include ‹stdlib.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = rand() % 20;

     ostream_iterator ‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     partition(v1.begin(), v1.end(), bind2nd(less‹int›(), 11));

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    vec1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int› v1; // Empty vector of integers.

     cout ‹‹ "empty = " ‹‹ v1.empty() ‹‹ endl;

     cout ‹‹ "size = " ‹‹ v1.size() ‹‹ endl;

     cout ‹‹ "max_size = " ‹‹ v1.max_size() ‹‹ endl;

     v1.push_back(42); // Add an integer to the vector.

     cout ‹‹ "size = " ‹‹ v1.size() ‹‹ endl;

     cout ‹‹ "v1[0] = " ‹‹ v1[0] ‹‹ endl;

     return 0;

    }

    sort2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int array[] = {1, 50, -10, 11, 42, 19};


    int main() {

     int count = sizeof(array) / sizeof(array[0]);

     ostream_iterator ‹int› iter(cout, " ");

     cout ‹‹ "before: ";

     copy(array, array + count, iter);

     cout ‹‹ "\nafter: ";

     sort(array, array + count, greater‹int›());

     copy(array, array + count, iter);

     cout ‹‹ endl;

     return 0;

    }

    copy4.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     typedef vector‹int› IVec;

     vector‹int› v1(10);

     for (int loc = 0; loc ‹ v1.size(); loc++) v1[loc] = loc;

     vector‹int› v2;

     insert_iterator‹IVec› i (v2, v2.begin());

     copy(v1.begin(), v1.end(), i);

     ostream_iterator‹int› outiter(cout, " ");

     copy(v2.begin(), v2.end(), outIter);

     cout ‹‹ endl;

     return 0;

    }

    prevprm2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(3);

     iota(v1.begin(), v1.end(), 0);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     for (int i = 0; i ‹ 9; i++) {

      prev_permutation(v1.begin(), v1.end(), greater‹int›());

      copy(v1.begin(), v1.end(), iter);

      cout ‹‹ endl;

     }

    return 0;

    }

    trnsfrm2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char map_char(char a_, int b_) {

     return char(a_ + b_);

    }


    int trans[] = {-4, 4, -6, -6, -10, 0, 10, -6, 6, 0, -1, -77};

    char n[] = "Larry Mullen";


    int main() {

     const unsigned count  = ::strlen(n);

     ostream_iterator ‹char› iter(cout);

     transform(n, n + count, trans, iter, map_char);

     cout ‹‹ endl;

     return 0;

    }

    iter1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹const char*› v; // Vector of character strings.

     v.push_back((char*) "zippy"); // First element.

     v.push_back((char*) "motorboy"); // Second element.

     vector‹const char*›::iterator i = v.begin(); // Position at end.

     for (i = v.begin(); i != v.end(); i++) cout ‹‹ *i ‹‹ endl; // Display item.

     return 0;

    }

    maxelem2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    char* names[] = {"Brett", "Graham", "Jack", "Mike", "Todd"};


    int main() {

     const unsigned namesCt = sizeof(names)/sizeof(names[0]);

     cout ‹‹ *max_element(names, names + namesCt, str_compare) ‹‹ endl;

     return 0;

    }

    minelem2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    char* names[] = {"Brett", "Graham", "Jack", "Mike", "Todd"};


    int main() {

     const unsigned namesCt = sizeof(names)/sizeof(names[0]);

     cout ‹‹ *min_element(names, names + namesCt, str_compare) ‹‹ endl;

     return 0;

    }

    partsum2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(5);

     iota(v1.begin(), v1.end(), 1);

     vector‹int› v2(v1.size());

     partial_sum(v1.begin(), v1.end(), v2.begin(), times‹int›());

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    istmit1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     char buffer[100];

     int i = 0;

     cin.unsetf(ios::skipws); // Disable white-space skipping.

     cout ‹‹ "Please enter a string: ";

     istream_iterator‹char, ptrdiff_t› s(cin);

     while (*s!= '\n') buffer[i++] = *s++;

     buffer[i] = '\0'; // Null terminate buffer.

     cout ‹‹ "read " ‹‹ buffer ‹‹ endl;

     return 0;

    }

    findif0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool odd(int a_) {

     return a_ % 2;

    }


    int numbers[6] = {2, 4, 8, 15, 32, 64};


    int main() {

     int* location = find_if(numbers, numbers + 6, odd);

     if (location != numbers + 6)

      cout ‹‹ "Value " ‹‹ *location ‹‹ " at offset " ‹‹ (location - numbers) ‹‹ " is odd" ‹‹ endl;

     return 0;

    }

    pheap1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v;


     v.push_back(1);

     v.push_back(20);

     v.push_back(4);

     make_heap(v.begin(), v.end());


     v.push_back(7);

     push_heap(v.begin(), v.end());


     sort_heap(v.begin(), v.end());

     ostream_iterator‹int› iter(cout, " ");

     copy(v.begin(), v.end(), iter);

     cout ‹‹ endl;


     return 0;

    }

    stblsrt2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool string_less(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    char* letters[6] = {"bb", "aa", "ll", "dd", "qq", "cc"};


    int main() {

     stable_sort(letters, letters + 6, string_less);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ letters[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    nextprm1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(3);

     iota(v1.begin(), v1.end(), 0);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     for (int i = 0; i ‹ 9; i++) {

      next_permutation(v1.begin(), v1.end());

      copy(v1.begin(), v1.end(), iter);

      cout ‹‹ endl;

     }

     return 0;

    }

    prevprm1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(3);

     iota(v1.begin(), v1.end(), 0);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     for (int i = 0; i ‹ 9; i++) {

      prev_permutation(v1.begin(), v1.end());

      copy(v1.begin(), v1.end(), iter);

      cout ‹‹ endl;

     }

     return 0;

    }

    rndshuf1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     for (int i = 0; i ‹ 3; i++) {

      random_shuffle(v1.begin(), v1.end());

      copy(v1.begin(), v1.end(), iter);

      cout ‹‹ endl;

     }

     return 0;

    }

    ptrbinf1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int sum(int x_, int y_) {

     return x_ + y_;

    }


    int input1[4] = {7, 2, 3, 5};

    int input2[4] = {1, 5, 5, 8};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, pointer_to_binary_function‹int, int, int›(sum));

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    iter2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    void print (const vector‹const char*›& v_) {

     vector‹const char*›::const_iterator i;

     for (i = v_.begin(); i != v_.end(); i++) cout ‹‹ *i ‹‹ endl;

    }


    int main() {

     vector‹const char*› v; // Vector of character strings.

     v.push_back((char*) "zippy");

     v.push_back((char*) "motorboy");

     print (v);

     return 0;

    }

    partsum1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     iota(v1.begin(), v1.end(), 0);

     vector‹int› v2(v1.size());

     partial_sum(v1.begin(), v1.end(), v2.begin());

     ostream_iterator ‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    replif1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool odd(int a_) {

     return a_ % 2;

    }


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = i % 5;

      cout ‹‹ v1[i] ‹‹ ' ';

     }

     cout ‹‹ endl;

     replace_if(v1.begin(), v1.end(), odd, 42);

     for (i = 0; i ‹ v1.size(); i++) cout ‹‹ v1[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    mset4.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {3, 6, 1, 2, 3, 2, 6, 7, 9};


    int main()
    {

     typedef multiset‹int, less‹int› › mset;

     mset s(array, array + 9);

     pair‹mset::const_iterator, mset::const_iterator› p = s.equal_range(3);

     cout ‹‹ "lower bound = " ‹‹ *(p.first) ‹‹ endl;

     cout ‹‹ "upper bound = " ‹‹ *(p.second) ‹‹ endl;

     return 0;

    }

    iter3.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹const char*› v; // Vector of character strings.

     v.push_back((char*) "zippy"); // First element.

     v.push_back((char*) "motorboy"); // Second element.

     vector‹const char*›::reverse_iterator i;

     for (i = v.rbegin(); i!= v.rend(); i++) cout ‹‹ *i ‹‹ endl; // Display item.

     return 0;

    }

    list2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array1[] = {1, 16};

    int array2[] = {4, 9};


    int main() {

     list‹int› l1(array1, array1 + 2);

     list‹int› l2(array2, array2 + 2);

     list‹int›::iterator i = l1.begin();

     i++;

     l1.splice(i, l2, l2.begin(), l2.end());

     i = l1.begin();

     while (i != l1.end()) cout ‹‹ *i++ ‹‹ endl;

     return 0;

    }

    set1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     set‹int, less‹int› › s;

     cout ‹‹ "count(42) = " ‹‹ s.count(42) ‹‹ endl;

     s.insert(42);

     cout ‹‹ "count(42) = " ‹‹ s.count(42) ‹‹ endl;

     s.insert(42);

     cout ‹‹ "count(42) = " ‹‹ s.count(42) ‹‹ endl;

     int count = s.erase(42);

     cout ‹‹ count ‹‹ " elements erased" ‹‹ endl;

     return 0;

    }

    list1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array1[] = {9, 16, 36};

    int array2[] = {1, 4};


    int main() {

     list‹int› l1(array1, array1 + 3);

     list‹int› l2(array2, array2 + 2);

     list‹int›::iterator i1 = l1.begin();

     l1.splice(i1, l2);

     list‹int›::iterator i2 = l1.begin();

     while (i2!= l1.end()) cout ‹‹ *i2++ ‹‹ endl;

     return 0;

    }

    alg5.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     list‹int› years;

     years.push_back(1962);

     years.push_back(1992);

     years.push_back(2001);

     years.push_back(1999);

     sort(years.begin(), years.end()); // Causes linker error.

     list‹int›::iterator i;

     for (i = years.begin(); i != years.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    eqlrnge0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[10] = {0, 0, 1, 1, 2, 2, 2, 2, 3, 3};


    int main() {

     pair ‹int*, int*› range;

     range = equal_range(numbers, numbers + 10, 2);

     cout ‹‹ "2 can be inserted from before index " ‹‹ (range.first - numbers)

      ‹‹ " to before index " ‹‹ (range.second - numbers) ‹‹ endl;

     return 0;

    }

    advance.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     typedef vector‹int› IntVector;

     IntVector v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i;

     IntVector::iterator location = v.begin();

     cout ‹‹ "At Beginning: " ‹‹ *location ‹‹ endl;

     advance(location, 5);

     cout ‹‹ "At Beginning + 5: " ‹‹ *location ‹‹ endl;

     return 0;

    }

    replace1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = i % 5;

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     replace(v1.begin(), v1.end(), 2, 42);

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    alg3.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int› i;

     i.push_back(1);

     i.push_back(4);

     i.push_back(2);

     i.push_back(8);

     i.push_back(2);

     i.push_back(2);

     int n = 0; // Must be initialized, as count increments n.

     count(i.begin(), i.end(), 2, n);

     cout ‹‹ "Count of 2s = " ‹‹ n ‹‹ endl;

     return 0;

    }

    func2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool bigger_than(int x_, int y_) {

     return x_ › y_;

    }


    int main() {

     vector‹int›v;

     v.push_back(4);

     v.push_back(1);

     v.push_back(5);

     sort(v.begin(), v.end(), bigger_than);

     vector‹int›::iterator i;

     for (i = v.begin(); i != v.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    unegate1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    struct odd: public unary_function‹int, bool› {

     odd() {}

     bool operator() (int n_) const {return (n_ % 2) - 1;}

    };


    int array[3] = {1, 2, 3};


    int main() {

     int* p = find_if(array, array + 3, unary_negate‹odd›(odd()));

     if (p != array + 3)

     cout ‹‹ *p ‹‹ endl;

     return 0;

    }

    alg4.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int› years;

     years.push_back(1962);

     years.push_back(1992);

     years.push_back(2001);

     years.push_back(1999);

     sort(years.begin(), years.end());

     vector‹int›::iterator i;

     for (i = years.begin(); i!= years.end(); i++)

     cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    countif1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int odd(int a_) {

     return a_ % 2;

    }


    int main() {

     vector‹int› numbers(100);

     for (int i = 0; i ‹ 100; i++) numbers[i] = i % 3;

     int elements = 0;

     count_if(numbers.begin(), numbers.end(), odd, elements);

     cout ‹‹ "Found " ‹‹ elements ‹‹ " odd elements." ‹‹ endl;

     return 0;

    }

    lwrbnd1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(20);

     for (int i = 0; i ‹ v1.size(); i++) {

      v1[i] = i/4;

      cout ‹‹ v1[i] ‹‹ ' ';

     }

     int* location = lower_bound(v1.begin(), v1.end(), 3);

     cout ‹‹ "\n3 can be inserted at index: " ‹‹ (location - v1.begin()) ‹‹ endl;

     return 0;

    }

    lexcmp1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    const unsigned size = 6;

    char n1[size] = "shoe";

    char n2[size] = "shine";


    int main() {

     bool before = lexicographical_compare(n1, n1 + size, n2, n2 + size);

     if (before) cout ‹‹ n1 ‹‹ " is before " ‹‹ n2 ‹‹ endl;

     else cout ‹‹ n2 ‹‹ " is before " ‹‹ n1 ‹‹ endl;

     return 0;

    }

    copyb.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = i;

     vector‹int› v2(v1.size());

     copy_backward(v1.begin(), v1.end(), v2.end());

     ostream_iterator‹int› iter(cout, " ");

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    ptrbinf2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int sum(int x_, int y_) {

     return x_ + y_;

    }


    int input1[4] = {7, 2, 3, 5};

    int input2[4] = {1, 5, 5, 8};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, ptr_fun(sum));

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    copyb0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[5] = {1, 2, 3, 4, 5};


    int main() {

     int result[5];

     copy_backward(numbers, numbers + 5, result + 5);

     for (int i = 0; i ‹ 5; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     for (i = 0; i ‹ 5; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    binsert1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* array[] = {"laurie", "jennifer", "leisa"};


    int main() {

     vector‹char*› names;

     copy(array, array + 3, back_insert_iterator‹vector‹char*› ›(names));

     vector‹char*›::iterator i;

     for (i = names.begin(); i!= names.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    unegate2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    struct odd: public unary_function‹int, bool› {

     odd() {}

     bool operator() (int n_) const {return (n_ % 2) - 1;}

    };


    int array[3] = {1, 2, 3};


    int main() {

     int* p = find_if(array, array + 3, not1 (odd()));

     if (p != array + 3) cout ‹‹ *p ‹‹ endl;

     return 0;

    }

    revcopy1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 3, 4, 5};


    int main() {

     int result[6];

     reverse_copy(numbers, numbers + 6, result);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     for (i = 0; i ‹ 6; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    finsert1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* array[] = {"laurie", "jennifer", "leisa"};


    int main() {

     deque‹char*› names;

     copy(array, array + 3, front_insert_iterator‹deque ‹char*› ›(names));

     deque‹char*›::iterator i;

     for (i = names.begin(); i!= names.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    remcpif1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool odd(int a_) {

     return a_ % 2;

    }


    int numbers[6] = {1, 2, 3, 1, 2, 3};

    int result[6] = {0, 0, 0, 0, 0, 0};


    int main() {

     remove_copy_if(numbers, numbers + 6, result, odd);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    inplmrg1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {1, 10, 42, 3, 16, 32};


    int main() {

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     inplace_merge(numbers, numbers + 3, numbers + 6);

     for (i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    list4.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array1[] = {1, 3, 6, 7};

    int array2[] = {2, 4};


    int main() {

     list‹int› l1(array1, array1 + 4);

     list‹int› l2(array2, array2 + 2);

     l1.merge(l2);

     for (list‹int›::iterator i = l1.begin(); i != l1.end(); i++) cout ‹‹ *i;

     cout ‹‹ endl;

     return 0;

    }

    revbit1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 5, 2, 3};


    int main() {

     list‹int› v(array, array + 4);

     reverse_bidirectional_iterator‹list‹int›::iterator, int, list‹int›::reference, list‹int›::difference_type› r(v.end());

     while (r != v.begin())

     cout ‹‹ *r++ ‹‹ endl;

     return 0;

    }

    copy3.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = i;

     vector‹int› v2(10);

     copy(v1.begin(), v1.end(), v2.begin());

     ostream_iterator‹int› iter(cout, " ");

     copy(v2.begin(), v2.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    merge0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers1[5] = {1, 6, 13, 25, 101};

    int numbers2[5] = {-5, 26, 36, 46, 99};


    int main() {

     int result[10];

     merge(numbers1, numbers1 + 5, numbers2, numbers2 + 5, result);

     for (int i = 0; i ‹ 10; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    reviter1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 5, 2, 3};


    int main() {

     vector‹int› v(array, array + 4);

     stl_reverse_iterator‹vector‹int›::iterator, int, vector‹int›::reference, vector‹int›::difference_type› r (v.end());

     while (r!= v.begin()) cout ‹‹ *r++ ‹‹ endl;

     return 0;

    }

    find1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int years[] = {1942, 1952, 1962, 1972, 1982, 1992};


    int main() {

     const unsigned yearCount = sizeof(years) / sizeof(years[0]);

     int* location = find(years, years + yearCount, 1972);

     cout ‹‹ "Found 1972 at offset " ‹‹ (location - years) ‹‹ endl;

     return 0;

    }

    trnsfrm1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int negate_int(int a_) {

     return -a_;

    }


    int numbers[6] = {-5, -1, 0, 1, 6, 11};


    int main() {

     int result[6];

     transform(numbers, numbers + 6, result, negate_int);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    binsert2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* array[] = {"laurie", "jennifer", "leisa"};


    int main() {

     vector‹char*› names;

     copy(array, array + 3, back_inserter(names));

     vector‹char*›::iterator i;

     for (i = names.begin(); i!= names.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    finsert2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* array[] = {"laurie", "jennifer", "leisa"};


    int main() {

     deque‹char*› names;

     copy(array, array + 3, front_inserter(names));

     deque‹char*›::iterator i;

     for (i = names.begin(); i!= names.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    mset2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    char* names[] = {"dave", "alf", "chas", "bob", "ed", "chas"};


    int main() {

     typedef multiset‹char*, less_s› mset;

     mset s;

     s.insert(names, names + 6);

     for (mset::iterator i = s.begin(); i!= s.end(); i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    ostmit.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 5, 2, 4};


    int main() {

     char* string = "hello";

     ostream_iterator‹char› it1(cout);

     copy(string, string + 5, it1);

     cout ‹‹ endl;

     ostream_iterator‹int› it2(cout);

     copy(array, array + 4, it2);

     cout ‹‹ endl;

     return 0;

    }

    ptrunf1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool even(int n_) {

     return (n_ % 2) == 0;

    }


    int array[3] = {1, 2, 3};


    int main() {

     int* p = find_if(array, array + 3, pointer_to_unary_function‹int, bool›(even));

     if (p != array + 3) cout ‹‹ *p ‹‹ " is even" ‹‹ endl;

     return 0;

    }

    func1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool bigger(int i_) {

     return i_ › 3;

    }


    int main() {

     vector‹int› v;

     v.push_back(4);

     v.push_back(1);

     v.push_back(5);

     int n = 0;

     count_if(v.begin(), v.end(), bigger, n);

     cout ‹‹ "Number greater than 3 = " ‹‹ n ‹‹ endl;

     return 0;

    }

    stblptn0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool less_10(int a_) {

     return a_ ‹ 10 ? 1 : 0;

    }


    int numbers[6] = {10, 5, 11, 20, 6, -2};


    int main() {

     stable_partition(numbers, numbers + 6, less_10);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    setunon0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[3] = {13, 18, 23};

    int v2[4] = {10, 13, 17, 23};

    int result[7] = {0, 0, 0, 0, 0, 0, 0};


    int main() {

     set_union(v1, v1 + 3, v2, v2 + 4, result);

     for (int i = 0; i ‹ 7; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    mkheap1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {5, 10, 4, 13, 11, 19};


    int main() {

     make_heap(numbers, numbers + 6, greater‹int›());

     for (int i = 6; i ›= 1; i--) {

      cout ‹‹ numbers[0] ‹‹ endl;

      pop_heap(numbers, numbers + i, greater‹int›());

     }

     return 0;

    }

    setintr0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[3] = {13, 18, 23};

    int v2[4] = {10, 13, 17, 23};

    int result[4] = {0, 0, 0, 0};


    int main() {

     set_intersection(v1, v1 + 3, v2, v2 + 4, result);

     for (int i = 0; i ‹ 4; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    logicand.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool input1[4] = {1, 1, 0, 1};

    bool input2[4] = {0, 1, 0, 0};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, logical_and‹bool›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    logicor.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool input1[4] = {1, 1, 0, 1};

    bool input2[4] = {0, 1, 0, 0};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, logical_or‹bool›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    nequal.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input1[4] = {1, 7, 2, 2};

    int input2[4] = {1, 6, 2, 3};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, not_equal_to‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    ptition0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int less_10(int a_) {

     return a_ ‹ 10 ? 1 : 0;

    }


    int numbers[6] = {6, 12, 3, 10, 1, 20};


    int main() {

     partition(numbers, numbers + 6, less_10);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    inrprod0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    int vector1[5] = {1, 2, 3, 4, 5};

    int vector2[5] = {1, 2, 3, 4, 5};


    int main() {

     int result;

     result = inner_product(vector1, vector1 + 5, vector2, 0);

     cout ‹‹ "Inner product = " ‹‹ result ‹‹ endl;

     return 0;

    }

    func3.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int›v;

     v.push_back(4);

     v.push_back(1);

     v.push_back(5);

     sort(v.begin(), v.end(), greater‹int›());

     vector‹int›::iterator i;

     for (i = v.begin(); i != v.end(); i++)  cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    modulus.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input1[4] = {6, 8, 10, 2};

    int input2[4] = {4, 2, 11, 3};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, modulus‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    uprbnd1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     int array[20];

     for (int i = 0; i ‹ 20; i++) {

      array[i] = i/4;

      cout ‹‹ array[i] ‹‹ ' ';

     }

     cout ‹‹ "\n3 can be inserted at index: "

      ‹‹ upper_bound(array, array + 20, 3) - array ‹‹ endl;

     return 0;

    }

    equalto.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input1[4] = {1, 7, 2, 2};

    int input2[4] = {1, 6, 2, 3};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, equal_to‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    count1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› numbers(100);

     for (int i = 0; i ‹ 100; i++) numbers[i] = i % 3;

     int elements = 0;

     count(numbers.begin(), numbers.end(), 2, elements);

     cout ‹‹ "Found " ‹‹ elements ‹‹ " 2's." ‹‹ endl;

     return 0;

    }

    uniqcpy1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[8] = {0, 1, 1, 2, 2, 2, 3, 4};

    int result[8] = {0, 0, 0, 0, 0, 0, 0, 0};


    int main() {

     unique_copy(numbers, numbers + 8, result);

     for (int i = 0; i ‹ 8; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    minus.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input1[4] = {1, 5, 7, 8};

    int input2[4] = {1, 4, 8, 3};


    int main() {

     int output[4];

     transform(input1, input1 + 4, input2, output, minus‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    replcpy1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 0, 1, 2};

    int result[6] = {0, 0, 0, 0, 0, 0};


    int main() {

     replace_copy(numbers, numbers + 6, result, 2, 42);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    swprnge1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    int main() {

     char* word1 = "World";

     char* word2 = "Hello";

     cout ‹‹ word1 ‹‹ " " ‹‹ word2 ‹‹ endl;

     swap_ranges(word1, word1 + ::strlen(word1), word2);

     cout ‹‹ word1 ‹‹ " " ‹‹ word2 ‹‹ endl;

     return 0;

    }

    vec8.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     vector‹int› v;

     cout ‹‹ "capacity = " ‹‹ v.capacity() ‹‹ endl;

     v.push_back(42);

     cout ‹‹ "capacity = " ‹‹ v.capacity() ‹‹ endl;

     v.reserve (5000);

     cout ‹‹ "capacity = " ‹‹ v.capacity() ‹‹ endl;

     return 0;

    }

    plus.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input1[4] = {1, 6, 11, 8};

    int input2[4] = {1, 5, 2, 3};


    int main() {

     int total = inner_product(input1, input1 + 4, input2, 0, plus‹int›(), times‹int›());

     cout ‹‹ "total = " ‹‹ total ‹‹ endl;

     return 0;

    }

    remcopy1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {1, 2, 3, 1, 2, 3};

    int result[6] = {0, 0, 0, 0, 0, 0};


    int main() {

     remove_copy(numbers, numbers + 6, result, 2);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    error2.cpp

    #include ‹stl.h›


    // Compile this code with the symbol OS_USE_EXCEPTIONS defined.

    int main() {

     vector‹int› v;

     try {

      v.pop_back(); // Generates an exception.

     } catch (const char* str) {

      cout ‹‹ "Caught exception " ‹‹ str ‹‹ endl;

     }

     return 0;

    }

    iterswp1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v1(6);

     iota(v1.begin(), v1.end(), 0);

     iter_swap(v1.begin(), v1.begin() + 3);

     ostream_iterator‹int› iter(cout, " ");

     copy(v1.begin(), v1.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    remif1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    bool odd(int a_) {

     return a_ % 2;

    }


    int numbers[6] = {0, 0, 1, 1, 2, 2};


    int main() {

     remove_if(numbers, numbers + 6, odd);

     for (int i = 0; i ‹ 6; i++)

     cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    foreach1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    void print_sqr(int a_) {

     cout ‹‹ a_ * a_ ‹‹ " ";

    }


    int main() {

     vector‹int› v1(10);

     for (int i = 0; i ‹ v1.size(); i++) v1[i] = i;

     for_each(v1.begin(), v1.end(), print_sqr);

     cout ‹‹ endl;

     return 0;

    }

    parsrtc0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {5, 2, 4, 3, 1, 6};


    int main() {

     int result[3];

     partial_sort_copy(numbers, numbers + 6, result, result + 3);

     for (int i = 0; i ‹ 3; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    pqueue2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     priority_queue‹deque‹char*›, greater_s› q;

     q.push((char*) "cat");

     q.push((char*) "dog");

     q.push((char*) "ape");

     while (!q.empty()) {

      cout ‹‹ q.top() ‹‹ endl;

      q.pop();

     }

     return 0;

    }

    binsrch1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     int vector[100];

     for (int i = 0; i ‹ 100; i++) vector[i] = i;

     if (binary_search(vector, vector + 100, 42)) cout ‹‹ "found 42" ‹‹ endl;

     else cout ‹‹ "did not find 42" ‹‹ endl;

     return 0;

    }

    ptrunf2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool even(int n_) {

     return (n_ % 2) == 0;

    }


    int array[3] = {1, 2, 3};


    int main() {

     int* p = find_if(array, array + 3, ptr_fun(even));

     if (p != array + 3) cout ‹‹ *p ‹‹ " is even" ‹‹ endl;

     return 0;

    }

    rotcopy0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 3, 4, 5};


    int main() {

     int result[6];

     rotate_copy(numbers, numbers + 3, numbers + 6, result);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    mkheap0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {5, 10, 4, 13, 11, 19};


    int main() {

     make_heap(numbers, numbers + 6);

     for (int i = 6; i ›= 1; i--) {

      cout ‹‹ numbers[0] ‹‹ endl;

      pop_heap(numbers, numbers + i);

     }

     return 0;

    }

    copy1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    char string[23] = "A string to be copied.";


    int main() {

     char result[23];

     copy(string, string + 23, result);

     cout ‹‹ " Src: " ‹‹ string ‹‹ "\nDest: " ‹‹ result ‹‹ endl;

     return 0;

    }

    find0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[10] = {0, 1, 4, 9, 16, 25, 36, 49, 64};


    int main() {

     int* location;

     location = find(numbers, numbers + 10, 25);

     cout ‹‹ "Found 25 at offset " ‹‹ (location - numbers) ‹‹ endl;

     return 0;

    }

    partsum0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {1, 2, 3, 4, 5, 6};


    int main() {

     int result[6];

     partial_sum(numbers, numbers + 6, result);

     for (int i = 0; i ‹ 6; i ++) cout ‹‹ result[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    bvec1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     bit_vector b(3);

     for (int i = 0; i ‹ b.size(); i++) cout ‹‹ b[i];

     cout ‹‹ endl;

     b[0] = b[2] = 1;

     for (i = 0; i ‹ b.size(); i++) cout ‹‹ b[i];

     cout ‹‹ endl;

     return 0;

    }

    bind2nd1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[3] = {1, 2, 3};


    int main() {

     replace_if(array, array + 3, binder2nd‹greater‹int› ›(greater‹int›(), 2), 4);

     for (int i = 0; i ‹ 3; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    bind1st1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[3] = {1, 2, 3};


    int main() {

     int* p = remove_if(array, array + 3, binder1st‹less‹int› ›(less‹int›(), 2));

     for (int* i = array; i != p; i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    reviter2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 5, 2, 3};


    int main() {

     vector‹int› v(array, array + 4);

     vector‹int›::reverse_iterator r;

     for (r = v.rbegin(); r != v.rend(); r++) cout ‹‹ *r ‹‹ endl;

     return 0;

    }

    copy2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v(10);

     for (int i = 0; i ‹ v.size(); i++) v[i] = i;

     ostream_iterator‹int› iter(cout, " ");

     copy(v.begin(), v.end(), iter);

     cout ‹‹ endl;

     return 0;

    }

    max2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    int main() {

     cout ‹‹ max("shoe", "shine", str_compare) ‹‹ endl;

     return 0;

    }

    min2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹string.h›


    bool str_compare(const char* a_, const char* b_) {

     return ::strcmp(a_, b_) ‹ 0 ? 1 : 0;

    }


    int main() {

     cout ‹‹ min("shoe", "shine", str_compare) ‹‹ endl;

     return 0;

    }

    parsrt0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {5, 2, 4, 3, 1, 6};


    int main() {

     partial_sort(numbers, numbers + 3, numbers + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    partsrt0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {5, 2, 4, 3, 1, 6};


    int main() {

     partial_sort(numbers, numbers + 3, numbers + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    bnegate1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[4] = {4, 9, 7, 1};


    int main() {

     sort(array, array + 4, binary_negate‹greater‹int› ›(greater‹int›()));

     for (int i = 0; i ‹ 4; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    nthelem0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {5, 2, 4, 1, 0, 3};


    int main() {

     nth_element(numbers, numbers + 3, numbers + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    revbit2.cpp


    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 5, 2, 3};


    int main() {

     list‹int› v(array, array + 4);

     list‹int›::reverse_iterator r;

     for (r = v.rbegin(); r != v.rend(); r++) cout ‹‹ *r ‹‹ endl;

     return 0;

    }

    count0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[10] = {1, 2, 4, 1, 2, 4, 1, 2, 4, 1};


    int main() {

     int result = 0;

     count(numbers, numbers + 10, 1, result);

     cout ‹‹ "Found " ‹‹ result ‹‹ " 1's." ‹‹ endl;

     return 0;

    }

    negate.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input[3] = {1, 2, 3};


    int main() {

     int output[3];

     transform(input, input + 3, output, negate‹int›());

     for (int i = 0; i ‹ 3; i++) cout ‹‹ output[i] ‹‹ endl;

     return 0;

    }

    pqueue1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     priority_queue‹deque‹int›, less‹int› › q;

     q.push(42);

     q.push(101);

     q.push(69);

     while (!q.empty()) {

      cout ‹‹ q.top() ‹‹ endl;

      q.pop();

     }

     return 0;

    }

    genern1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹stdlib.h›


    int main() {

     vector‹int› v1(10);

     generate_n(v1.begin(), v1.size(), rand);

     for (int i = 0; i ‹ 10; i++) cout ‹‹ v1[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    rotate0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 3, 4, 5};


    int main() {

     rotate(numbers, numbers + 3, numbers + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    foreach0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    void print(int a_) {

     cout ‹‹ a_ ‹‹ ' ';

    }


    int numbers[10] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55};


    int main() {

     for_each(numbers, numbers + 10, print);

     cout ‹‹ endl;

     return 0;

    }

    alg2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int i[] = {1, 4, 2, 8, 2, 2};


    int main() {

     int n = 0; // Must be initialized, as count increments n.

     count(i, i + 6, 2, n);

     cout ‹‹ "Count of 2s = " ‹‹ n ‹‹ endl;

     return 0;

    }

    gener1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›

    #include ‹stdlib.h›


    int main() {

     int numbers[10];

     generate(numbers, numbers + 10, rand);

     for (int i = 0; i ‹ 10; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    replace0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 0, 1, 2};


    int main() {

     replace(numbers, numbers + 6, 2, 42);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    rndshuf0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {1, 2, 3, 4, 5, 6};


    int main() {

     random_shuffle(numbers, numbers + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    bind1st2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[3] = {1, 2, 3};


    int main() {

     int* p = remove_if(array, array + 3, bind1st(less‹int›(), 2));

     for (int* i = array; i != p; i++) cout ‹‹ *i ‹‹ endl;

     return 0;

    }

    unique1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[8] = {0, 1, 1, 2, 2, 2, 3, 4};


    int main() {

     unique(numbers, numbers + 8);

     for (int i = 0; i ‹ 8; i ++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    bind2nd2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[3] = {1, 2, 3};


    int main() {

     replace_if(array, array + 3, bind2nd(greater‹int (), 2), 4);

     for (int i = 0; i ‹ 3; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    vec5.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[] = {1, 4, 9, 16};


    int main() {

     vector‹int› v(array, array + 4);

     for (int i = 0; i ‹ v.size(); i++) cout ‹‹ "v[" ‹‹ i ‹‹ "] = " ‹‹ v[i] ‹‹ endl;

     return 0;

    }

    iterswp0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 3, 4, 5};


    int main() {

     iter_swap(numbers, numbers + 3);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    remove1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {1, 2, 3, 1, 2, 3};


    int main() {

     remove(numbers, numbers + 6, 1);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    stblsrt1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int array[6] = {1, 50, -10, 11, 42, 19};


    int main() {

     stable_sort(array, array + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ array[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    reverse1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {0, 1, 2, 3, 4, 5};


    int main() {

     reverse(numbers, numbers + 6);

     for (int i = 0; i ‹ 6; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    logicnot.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    bool input[7] = {1, 0, 0, 1, 1, 1, 1};


    int main() {

     int n = 0;

     count_if(input, input + 7, logical_not‹bool›(), n);

     cout ‹‹ "count = " ‹‹ n ‹‹ endl;

     return 0;

    }

    bnegate2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[4] = {4, 9, 7, 1};


    int main() {

     sort(array, array + 4, not2(greater‹int›()));

     for (int i = 0; i ‹ 4; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    queue1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     queue‹list‹int› › q;

     q.push(42);

     q.push(101);

     q.push(69);

     while (!q.empty()) {

      cout ‹‹ q.front() ‹‹ endl;

      q.pop();

     }

     return 0;

    }

    stack1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     stack‹deque‹int› › s;

     s.push(42);

     s.push(101);

     s.push(69);

     while (!s.empty()) {

      cout ‹‹ s.top() ‹‹ endl;

      s.pop();

     }

     return 0;

    }

    greateq.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[4] = {3, 1, 4, 2};


    int main() {

     sort(array, array + 4, greater_equal‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    stack2.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     stack‹list‹int› › s;

     s.push(42);

     s.push(101);

     s.push(69);

     while (!s.empty()) {

      cout ‹‹ s.top() ‹‹ endl;

      s.pop();

     }

     return 0;

    }

    lesseq.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[4] = {3, 1, 4, 2};


    int main() {

     sort(array, array + 4, less_equal‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    divides.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input[3] = {2, 3, 4};


    int main() {

     int result = accumulate(input, input + 3, 48, divides‹int›());

     cout ‹‹ "result = " ‹‹ result ‹‹ endl;

     return 0;

    }

    greater.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[4] = {3, 1, 4, 2};


    int main() {

     sort(array, array + 4, greater‹int›());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    swap1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     int a = 42;

     int b = 19;

     cout ‹‹ "a = " ‹‹ a ‹‹ " b = " ‹‹ b ‹‹ endl;

     swap(a, b);

     cout ‹‹ "a = " ‹‹ a ‹‹ " b = " ‹‹ b ‹‹ endl;

     return 0;

    }

    times.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int input[4] = {1, 5, 7, 2};


    int main() {

     int total = accumulate(input, input + 4, 1, times‹int›());

     cout ‹‹ "total = " ‹‹ total ‹‹ endl;

     return 0;

    }

    less.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int array[4] = {3, 1, 4, 2};


    int main() {

     sort(array, array + 4, less‹int› ());

     for (int i = 0; i ‹ 4; i++) cout ‹‹ array[i] ‹‹ endl;

     return 0;

    }

    alg1.cpp

    #include ‹iostream.h›

    #include ‹stl.h›


    int main() {

     int i = min(4, 7);

     cout ‹‹ "min(4, 7) = " ‹‹ i ‹‹ endl;

     char c = maX('a', 'z');

     cout ‹‹ "maX('a', 'z') = " ‹‹ c ‹‹ endl;

     return 0;

    }

    filln1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v(10);

     fill_n(v.begin(), v.size(), 42);

     for (int i = 0; i ‹ 10; i++) cout ‹‹ v[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    iota1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     int numbers[10];

     iota(numbers, numbers + 10, 42);

     for (int i = 0; i ‹ 10; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    nextprm0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[3] = {0, 1, 2};


    int main() {

     next_permutation(v1, v1 + 3);

     for (int i = 0; i ‹ 3; i++) cout ‹‹ v1[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    prevprm0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int v1[3] = {0, 1, 2};


    int main() {

     prev_permutation(v1, v1 + 3);

     for (int i = 0; i ‹ 3; i++) cout ‹‹ v1[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    fill1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     vector‹int› v(10);

     fill(v.begin(), v.end(), 42);

     for (int i = 0; i ‹ 10; i++) cout ‹‹ v[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }

    pair2.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     pair‹int, int› p = make_pair(1, 10);

     cout ‹‹ "p.first = " ‹‹ p.first ‹‹ endl;

     cout ‹‹ "p.second = " ‹‹ p.second ‹‹ endl;

     return 0;

    }

    error1.cpp

    #include ‹stl.h›


    // Compile this code without defining the symbol OS_USE_EXCEPTIONS.

    int main() {

     vector‹int› v;

     v.pop_back(); // Generates an empty object error.

     return 0;

    }

    pair0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     pair‹int, int› p = make_pair(1, 10);

     cout ‹‹ "p.first = " ‹‹ p.first ‹‹ ", p.second = " ‹‹ p.second ‹‹ endl;

     return 0;

    }

    pair1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     pair‹int, int› p = make_pair(1, 10);

     cout ‹‹ "p.first = " ‹‹ p.first ‹‹ ", p.second = " ‹‹ p.second ‹‹ endl;

     return 0;

    }

    minelem1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {-10, 15, -100, 36, -242, 42};


    int main() {

     cout ‹‹ *min_element(numbers, numbers + 6) ‹‹ endl;

     return 0;

    }

    maxelem1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[6] = {4, 10, 56, 11, -42, 19};


    int main() {

     cout ‹‹ *max_element(numbers, numbers + 6) ‹‹ endl;

     return 0;

    }

    max1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     cout ‹‹ max(42, 100) ‹‹ endl;

     return 0;

    }

    min1.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int main() {

     cout ‹‹ min(42, 100) ‹‹ endl;

     return 0;

    }

    adjdiff0.cpp

    #include ‹stl.h›

    #include ‹iostream.h›


    int numbers[5] = {1, 2, 4, 8, 16};


    int main() {

     int difference[5];

     adjacent_difference(numbers, numbers + 5, difference);

     for (int i = 0; i ‹ 5; i++) cout ‹‹ numbers[i] ‹‹ ' ';

     cout ‹‹ endl;

     for (i = 0; i ‹ 5; i++) cout ‹‹ difference[i] ‹‹ ' ';

     cout ‹‹ endl;

     return 0;

    }








    Ãëàâíàÿ |  èçáðàííîå | Íàø E-MAIL | Ïðèñëàòü ìàòåðèàë | Íàø¸ë îøèáêó | Íàâåðõ