|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
OutIterr replace_copy(InIter start, InIter end,
OutIter result, const T &old, const T &new);
Алгоритм replace_copy() копирует элементы из заданного диапазона, заменяя элемент old элементом new. Он помещает результат в последовательность, на которую ссылается итератор result, и возвращает итератор, установленный на ее конец. Размер результирующего контейнера должен быть достаточно большим, чтобы в нем поместился результат. Алгоритмы remove_copy() и replace_copy() иллюстрируются следующей программой. Она создает последовательность символов, а затем удаляет из нее все пробелы, заменяя их двоеточиями.
// Демонстрация алгоритмов remove_copy и replace_copy. #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { system("chcp 1251"); char str[] = "Шаблон STL обладает большой мощью."; vector<char> v, v2(40); unsigned int i; for(i=0; str[i]; i++) v.push_back(str[i]); // **** Демонстрация алгоритма remove_copy **** cout << "Исходная последовательность:\n"; for(i=0; i<v.size(); i++) cout <<v[i]; cout << endl; // Удаляем все пробелы. remove_copy (v. begin (), v.end(), v2.begin(), ' '); cout << "Результат после удаления пробелов:\n"; for(i=0; i<v2.size(); i++) cout << v2[i]; cout << endl << endl; //**** Демонстрация алгоритма replace_copy **** cout <<"Исходная последовательность:\n"; for(i=0; i<v.size(); i++) cout << v[i]; cout << endl; // Заменяем пробелы двоеточиями replace_copy(v.begin(), v.end(), v2.begin(), ' ',':'); cout << "Результат после замены пробелов двоеточиями:\n"; for(i=0; i<v2.size(); i++) cout << v2[i]; cout << endl << endl; system("pause"); return 0; }
Результат работы этой программы приведен ниже.
Изменение порядка следования элементов последовательности Для изменения порядка следования элементов последовательности на обратный применяется алгоритм reverse(). Его спецификация имеет следующий вид. template <class BiIter> void reverse (BiIter start, BiIter end); Алгоритм reverse () изменяет порядок следования элементов в диапазоне между тераторами start и end на обратный. Проиллюстрируем алгоритм reverse () следующей программой.
// Демонстрация алгоритма reverse, #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { system("chcp 1251"); vector<int> v; unsigned int i; for(i=0; i<10; i++) v.push_back(i); cout << "Исходная последовательность: "; for(i=0; i<v.size(); i++) cout << v[i] << " "; cout << endl; reverse (v.begin (), v.end()); cout << "Обратная последовательность: "; for(i=0; i<v.size(); i++) cout << v[i] << " "; cout<<endl; system("pause"); return 0; }
Результаты ее работы выглядят так.
Преобразование последовательности Один из самых интересных алгоритмов — transform() — модифицирует каждый элемент заданного диапазона с помощью функции, заданной программистом. Алгоритм transform() имеет две разновидности.
template <class InIter, class OutIter, class Func, Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |