template ‹class T›
void return_temporary_buffer(T* p);
get_temporary_buffer ищет наибольший буфер, не больше чем n*sizeof(T), и возвращает пару, состоящую из адреса и размера (в единицах sizeof(T)) буфера. return_temporary_buffer возвращает буфер, выделенный get_temporary_buffer.
ПРИМЕРЫ ПРОГРАММ С ШАБЛОНАМИ
Эти примеры демонстрируют использование нового продукта 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 ‹‹ '
letters:';
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 ‹‹ '
letters:';
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;
}