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

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

Читать бесплатно Александр Степанов - РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL). Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

 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):nt";

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

 cout ‹‹ "nt";

 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() {

Перейти на страницу:

Александр Степанов читать все книги автора по порядку

Александр Степанов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL) отзывы

Отзывы читателей о книге РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL), автор: Александр Степанов. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


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