KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Александр Степанов - РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)

Александр Степанов - РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Александр Степанов, "РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)" бесплатно, без регистрации.
Перейти на страницу:

 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]);

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*