Каталог статей

Главная » Статьи » Мои статьи

Стандартные алгоритмы для работы с STL (algorithm)

В C++ существует множество спецальных алгоритмов для работы с массивами. Они позволяют сортировать данные в массиве, искать в нем какое-либо значение, менять элементы местами и т.д. Для их работы вам необходимо подкючить <algorithm> в начале программы.

Алгоритмы поиска.

Все алгоритмы поиска возвращают итератор на элемент, а не сам элемент.

  • find(begin,end,what) - ищет первый элемент со значенимем what в промежутке begin - end, где begin и end - итераторы соответствующего контейнера
  • adjacent_find(start,end) - ищет два последовательных совпадающих элемента между start и end и возвращает итератор на него
  • search(start,end,sbegin,send) - ищет между start и end последовательность sbegin-send

Алгоритмы сортировки

  • reverse(start,end) - инвертирует элементы последовательности start-end (т.е. сортирует в обратном порядке. Если было последовательность 1 2 3, то в результате получим 3 2 1)
  • random_shuffle(start,end) - сортирует элементы между start и end в случайном порядке
  • sort(start,end) - сортирует элементы от start до end в порядке возврастания.

Удаления элементов

  • remove(begin,end,what) - в промежутке begin-end удаляет все what
  • unique(begin,end) - удаляет все дубликаты

Другие функции

  • swap_ranges(start,end,start2) - меняет местами элементы от start до end с элементами от start2 до end2, end2 рассчитывается автоматом, чтобы промежуток start-end был равен промежтку start2-end2
  • replace(s,e,d1,d2) - меняет в промежутке s-e все элементы d1 на элементы d2
  • fill(begin,end,data) - заполнить промежуток от begin до end значением data
  • copy(start,end,new_start) - копирует промежуток от start до end в new_start (все параметры - итераторы)
  • count(sbegin,send,d) - подсчет количества элементов со значением d в промежутке sbegin - send
  • equal(start,end,start2) - возвращает true, если  start-end == start2 - end2 (количество элементов start-end равно количеству элементов start2-end2)

На первое время хватит. Это были одни из самых используемых функций, со временем материал будет дополнен.

Пример (немного абсурдный, ну да ладно):

#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
ofstream out;
char filename[20];

ifstream in;

in.open("in.txt");

if (out==NULL)
{
cout< <"Error, can`t open file"<<endl;
return 0;
}

out.open("out.txt");
if (out==NULL)
{
cout<<"Error, can`t open file"<<endl;
return 0;
}
string s;
string text;

while  (in>>s)
text.append(s);

cout< <"Операции: вывести, сколько раз слово встречается  в файле: 1" <<endl;
cout<<"Sort file: 2"<<endl;
cout<<"Remove dublicates:3"<<endl;
cout<<"Random sort: 4"<<endl;
cout<<"Replace world to word: 5"<<endl;
cout<<"text v obratnom poradke: 6"<<endl;
cout<<"Write to file and exit:7"<<endl;
int status=0;
string::iterator start,end;
start=text.begin();
end=text.end();

while (true)
{
switch (status)
{  case 1:
{
cout<<"enter word"<<endl;
char word[100];
cin>>word;
cout< <"Result: "<<count(start,end,*word)<<endl;
break;

};
case 2:
{

sort(start,end);
cout<<"Done"<<endl;
break;
};
case 3:
{

unique(start,end);
cout<<"Done"<<endl;
break;
};
case 4:
{

random_shuffle(start,end);

cout<<"Done"<<endl;
break;
};
case 5:
{

cout<<"enter world 1"<<endl;
char word1[100];
cin>>word1;
cout< <"enter world 2"<<endl;
char word2[100];
cin>>word2;

replace(start,end,*word1,*word2);
cout< <"Done"<<endl;
break;
};
case 6:
{

reverse(start,end);
cout<<"Done"<<endl;
break;
};
case 7:
{
out<<text<<endl;

cout<<"good bye"<<endl;

return 0;
};
}

cin>>status;
}

return 0;
}


Источник: http://adorning.ru/2010/01/17/c-urok-9-standartnyie-algoritmyi-dlya-rabotyi-s-stl/
Категория: Мои статьи | Добавил: qt-boy (22.08.2010)
Просмотров: 12078 | Теги: Стандартные алгоритмы для работы с | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
3D Облако
Мини-чат
Категории раздела
Мои статьи [19]
Облако
About Qt QList Qtractor 0.4.2 QListView git-репозиторий Qt Жасмин Бланшет QtCreator 1.1 Qt Extended Qt Solutions Динамическое приведение QObject библиотеки Qt 4.5.1 Пишем собственный веб броузер QFileDialog QMessageBox Добавление информации о версии в .e Вышли бета-версии библиотеки Qt 4.7 Qt qt quick qt sdk qtcreator Singleton для Qt QInputDialog QColorDialog Примеры использования класса QEvent QFontDialog QFileSystemWatcher следим за директ GIf Анимация в QLabel Открытие ссылки в браузере установл Открытие ссылки в браузере установл Добавление итемов в QTableWidget QMap итератор Помещаем окно посередине экрана Выставляем флаги для окон Отловить нажатие клавиши на QLabel Отловить нажатие клавиши на QLabel Определить какой именно контрол был Показать на время курсор с песочным Сделать окно модальным Зашифровать данные в MD5 или MD4 Удаление из QlistWidget строки Написание DLL на С++ Диалог открытия файла Работа с реестром Ограничение на ввод определенного к QMessageBox подтверждение удаления Многопоточный сервер на примере Чат Отправляем файл на PHP скрипт Пример пересылки от клиента к серве Алгоритм сортировки (не очень оптим но если не важна скорость то сойдет Вставка текста из буфера обмена(при Проверить существует ли файл Распечатка текста из QTextEdit Вывести текст из QTextEdit в диалог Интересное о QFileInfo Отловить событие закрытие окна Проверка веб ссылки на валидность Иконка для QPushButton Преобразовать QString в char* Выдрать IP и порт из строки Получение списка всех файлов в дире Окно поверх всех Ввод пароля в QLineEdit Ввод в QLineEdit только цифр и точк Скачать файл по Ftp Пример использования оператора fore Пример использования класса QDir Получить список папок Кодирование/Декодирвоание Base64 Получить переменные среды Оставить у диалога только кнопку за Запуск сторонней программы из Qt ис Drop Добавление эффекта выделяющего прям Получение информации о свободном пр Запись структуры(пользовательского Получение информации о свободном ди Простой пример использования QProce Как унаследоваться от QObject Отрисовать виджет по форме картинки Перемещение виджета вслед за мышкой Сделать диалог поверх всех окон/поз Повернуть изображение QSignalMapper - как пользоваться Qt приведение типа QFileSystemWatcher следим за директ Добавление сигнала clicked() в QLab Рекурсивный поиск файлов и папок QWheelEvent определить направление Отловить завершение работы системы Валидация на ввод только цифр styleSheet QLabel красим текст под styleSheet QLabel простой пример styleSheet QTableWidget красим заго styleSheet QTableWidget красим QTab QTableWidgetItem текст по центу Проверка сокета Выход из вложенных циклов styleSheet QPushButton выравнивание
Наш опрос
Оцените мой сайт
Всего ответов: 91
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0