|
||||
|
ÏÐÈÌÅÐÛ ÏÐÎÃÐÀÌÌ Ñ ØÀÁËÎÍÀÌÈÝòè ïðèìåðû äåìîíñòðèðóþò èñïîëüçîâàíèå íîâîãî ïðîäóêòà 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 | Ïðèñëàòü ìàòåðèàë | Íàø¸ë îøèáêó | Íàâåðõ |
||||
|