I. Немодифицирующие операции
⇐ ПредыдущаяСтр 16 из 16 for_earch() выполняет операции для каждого элемента последовательности find() находит первое вхождение значения в последовательность find_if() находит первое соответствие предикату в последовательности count() подсчитывает количество вхождений значения в последовательность count_if() подсчитывает количество выполнений предиката в последовательности search() находит первое вхождение последовательности как подпоследовательности search_n() находит n-е вхождение значения в последовательность
II. Модифицирующие операции copy() копирует последовательность, начиная с первого элемента swap() меняет местами два элемента replace() заменяет элементы с указанным значением replace_if() заменяет элементы при выполнении предиката replace_copy() копирует последовательность, заменяя элементы с указанным значением replace_copy_if() копирует последовательность, заменяя элементы при выполнении предиката fill() заменяет все элементы данным значением remove() удаляет элементы с данным значением remove_if() удаляет элементы при выполнении предиката remove_copy() копирует последовательность, удаляя элементы с указанным значением remove_copy_if() копирует последовательность, удаляя элементы при выполнении предиката reverse() меняет порядок следования элементов на обратный random_shuffle() перемещает элементы согласно случайному равномерному распределению («тасует» последовательность) transform() выполняет заданную операцию над каждым элементом последовательности unique() удаляет равные соседние элементы unique_copy() копирует последовательность, удаляя равные соседние элементы III. Сортировка sort() сортирует последовательность с хорошей средней эффективностью partial_sort() сортирует часть последовательности
stable_sort() сортирует последовательность, сохраняя порядок следования равных элементов lower_bound() находит первое вхождение значения в отсортированной последовательности upper_bound() находит первый элемент, больший, чем заданное значение binary_search() определяет, есть ли данный элемент в отсортированной последовательности merge() сливает две отсортированные последовательности
IV. Работа с множествами includes() проверка на вхождение set_union() объединение множеств set_intersection() пересечение множеств set_difference() разность множеств
V. Минимумы и максимумы min() меньшее из двух max() большее из двух min_element() наименьшее значение в последовательности max_element() наибольшее значение в последовательности
VI. Перестановки next_permutation() следующая перестановка в лексикографическом порядке pred_permutation() предыдущая перестановка в лексикографическом порядке
Пример 8.8.1. Сортировка массива данных встроенных типов Алгоритм sort() имеет следующие основные формы. template<class RandIter> void sort(RandIter начало,RandIter конец) template<class RandIter,class Comp> void sort(RandIter начало,RandIter конец, Comp функция_сравнения) В примере создается и сортируется массив символов. #include<iostream> #include<vector> #include<cstdlib> #include<algorithm> using namespace std; void main() {vector<char> v; int i,k; cin>>k; //создание векторов из случайных символов for(i=0;i<k;i++) v.push_back(‘A’+(rand()%26)); //исходный массив for(i=0;i<v.size();i++)cout<<v[i]; cout<<endl; //сортировка вектора sort(v.begin(),v.end()); //отсортированный массив for(i=0;i<v.size();i++)cout<<v[i]; cout<<endl; } Пример 8.8.2. Сортировка массива данных пользовательских типов #include<iostream> #include<vector> #include<string> #include<algorithm> #include <functional> #include“student.h” //Определение класса STUDENT using namespace std; Определим функцию для сравнения студентов по рейтингу class pred: public binary_function< STUDENT, STUDENT,bool> { public: bool operator()(const STUDENT& st1, STUDENT& s2)const {return s1.GetGrade()<s2.GetGrade();}
}; В функции main() запишем vector< STUDENT> v; Затем надо заполнить контейнер v, например так: v1.push_back(STUDENT ("Иванов",19,54.5)); Если сейчас отсортировать контейнер следующим образом: sort(v.begin(),v.end()); то студенты будут отсортированы в зависимости от того, как определена в классе STUDENT опрерация <. Если мы хотим отсортировать контейнер нужным для нас образом, следует использовать объект-функцию. Например, определим функцию для сравнения студентов по рейтингу: class pred: public binary_function< STUDENT, STUDENT,bool> { public: bool operator()(const STUDENT& st1, STUDENT& s2)const {return s1.GetGrade()<s2.GetGrade();} }; Сортируем контейнер sort(v.begin(),v.end(),pred()); При передаче алгоритму sort третьего параметра создается объект класса pred (вызовом контейнера без конструктора) и вызывается перегруженная операция ().
Пример 8.8.3. Поиск в контейнере Создадим фунциональный класса для поиска по имени: class pred1:public unary_function< STUDENT,bool> { string s; public: explicit pred1(const string& ss):s(ss){} bool operator()(const STUDENT & ob)const {return ob.Get_Name()==s;} };
После этого для поиска можно использовать алгоритм find_if: vector<STUDENTt>::iterator it; it= find_if(v1.begin(),v1.end(),pred1("Котов")); После выполнения find_if следует проверить, найден ли объект. Вспомним, что в случае неудачи алгоритм возвращает значение функции end(). if(it!=v1.end())cout<<endl<<*p<<endl; else cout<<"Такого объекта нет"<<endl;
Приложение. Создание С++ приложений в среде Microsoft Visual Studio Концепция решений и проектов Сеанс работы в Microsoft Visual Studio.Net начинается с открытия существующего или создания нового решения(solution). Решение – это синоним рабочего пространства(workspace) в Microsoft Visual C++ 6.0. Файлы решений имеют расширение sln и используются IDE для хранения настроек и начальных установок конкретных решений. Концепция решений помогает объединить проекты и другие элементы в одном рабочем пространстве. Рабочее пространство может содержать несколько проектов, быть пустым или содержать файлы, которые имеют смысл и вне контекста решений. Проект как часть решения состоит из отдельных компонентов, например файлов ресурсов(rc-файл), файлов с исходными кодами(.cpp,.h). Настройки проектов хранятся в специальных файлах проектов. Они могут иметь разные расширения, так как в одном пространстве можно объединять проекты разных типов. Например, проект Win32 Aplication хранит свои установки в файле с расширением vcproj.
Создание нового проекта После запуска Visual Studio появится следующее окно(рис. 1) рис. 1
В этом окне выберем в меню File команду New->Project, либо нажмем Ctrl+Shift+N. В появившемся окне New Project в списке Project type выберем Visual C++/Win32, а в списке Templates – Win32 Console Application (рис. 2). В строке name введем имя проекта, а в строке Location выберем расположение проекта. Если Вы хотите создать папку для решения (solution), то следует отметить “Create directory for solution” и ввести имя решения в строке “Solution Name”.
рис. 2
Нажав кнопку OK, перейдем в Мастер Приложения(рис.3). рис. 3
Нажмем кнопку “Next” и перейдем в окно установки параметров проекта (рис. 4). рис. 4 В этом окне выберем Console application и Empty project. Нажмем кнопку “Finish”. Мастер создаст проект – консольное приложение. В окне проекта (рис. 5) мы видим три раздела: Object Browser, Solution Explorer и Resourse View. В окне Solution Explorer можно осуществлять навигацию по файлам проекта. В этом окне мы видим имя проекта(lab1) и три группы файлов(Header Files, Resource Files и Source Files). Пока проект не содержит файлов. Создадим необходимые файлы. Для этого в окне Solution Explorer щелкнем правой кнопкой мыши по проекту и в появившемся контекстном меню выберем Add/New Item…. рис. 5 В появившемся окне Add New Item (рис. 6) в списке Categories выберем Code, а в списке Templates – тип добавляемого в проект файла. рис. 6 Создадим три файла: country.h – определение класса, country.cpp – реализация класса и main.cpp – демонстрационная программа, содержащая функцию main(). Пока файлы пустые. Щелкнул по имени файла, мы перейдем в редактор кода, где и запишем соответствующий код(рис.7). рис. 7 Для того, чтобы откомпилировать и собрать проект(создать выполняемый exe-файл, щелкните правой кнопкой мыши по проекту и в появившемся контекстном меню выберите Build, Rebuild или Debug/Start new instance. То же самое можно сделать через меню Build и Debug или нажав Ctrl+F5. Результаты выполнения проекта увидим на вкладке Output (рис. 8). Если программа содержит ошибки, получим сообщение типа показанного на рисунке.
рис. 8 Щелкнув по сообщению об ошибке(рис. 9), мы перейдем к месту ошибки в коде программы(рис. 10).
рис. 9
рис. 10
На рисунке 11 показаны сообщения при успешной компиляции и компоновки программы. рис. 11
Установить конфигурацию проекта (Debug или Release) можно через меню Build/Configuration Menager(рис. 12). рис. 12
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|