Александр Степанов - РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)
- Название:РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL)
- Автор:
- Жанр:
- Издательство:МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
- Год:1999
- Город:Москва
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Степанов - РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL) краткое содержание
РУКОВОДСТВО ПО СТАНДАРТНОЙ БИБЛИОТЕКЕ ШАБЛОНОВ (STL) - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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);
Интервал:
Закладка: