АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

OutIterr replace_copy(InIter start, InIter end,

Читайте также:
  1. ALTERNATIVE PERSPECTIVE: A GENDER READING
  2. But they don’t want to play with me.
  3. Chapter 11
  4. Chapter 22
  5. Chapter Five
  6. Chapter Fourteen
  7. CHARACTER DEVELOPMENT
  8. CHARACTER DEVELOPMENT
  9. Concepts in research
  10. Diary 50
  11. FIRE CAUSES. INVESTIGATION OF FIRES
  12. HOW TO BUILD A WINNING TEAM

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,


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)