Разработка приложений на C++
  • Введение
  • Особенности разработки программ на С++
    • Указатель на функцию
    • Преобразование типов
    • Наследование
    • Виртуальные функции
    • Перегрузка операций
    • Функциональные объекты
    • Шаблоны
    • Пространства имён
    • Обработка исключительных ситуаций
    • Немного о компиляции и сборке
    • Рекоммендации по написанию кода
    • Новые возможности стандарта С++11
    • Терминология
  • Понятие структур данных
    • Массивы
    • Динамические структуры
  • Метапрограммирование
    • Шаблоны функций
    • Шаблоны классов
    • Специализация шаблонов
      • Пример: вычисление факториала
      • Пример: числа Фиббоначчи
    • Конфигурации шаблонных классов
  • Стандартная библиотека С++
    • Обзор стандартной библиотеки С++
    • Структура стандартной библиотеки С++
      • Концепции
    • Ввод-вывод данных
    • Примитивы, определённые в библиотеке STL
    • Итераторы
    • Контейнеры
      • Inplus: Как это работает
    • Алгоритмы
      • inplus: Как это работает
    • Примеры использования стандартной библиотеки С++
    • Стандартная библиотека С++/Вопросы
    • Стандартная библиотека С++/Примеры лабораторных работ
  • Разработка и использование библиотек программирования
    • Создание библиотек программирования
    • Использование динамических библиотек
    • Вопросы
    • Примеры лабораторных работ
  • Ответы на вопросы
Powered by GitBook
On this page
  • Пример 1:
  • Пример 2:
  • Пример 3:
  • Пример 4:
  1. Стандартная библиотека С++

Примеры использования стандартной библиотеки С++

В данной главе приведены ряд примеров, представляющих собой постепенное усложнение задания и его решение.

Пример 1:

Дан целочисленный массив. Отсортировать элементы массива в убывающем порядке.

Решение:

stdcpp01.cpp
#include <algorithm>
#include <functional>
#include <iostream>


int main(){
    int a[5] = {5, 2, 1, 8, 7};
    std::sort(a, a+5, std::less<int>());
    int i;
    for(i = 0; i != 5; ++i){
        std::cout << a[i] << " ";
    }
    return 0;
}

Пример 2:

Считать из файла input.txt массив целых чисел, разделенных пробельными символами. Отсортировать их и записать в файл output.txt.

Решение:

stdcpp02.cpp
#include <vector>
#include <algorithm>
#include <fstream>

int main(){
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");

    std::vector<int> v;

    std::copy(std::istream_iterator<int>(fin), 
        std::istream_iterator<int>(),
        std::inserter(v, v.end()));
    std::sort(v.begin(), v.end());
    std::copy(v.begin(), 
        v.end(), 
        std::ostream_iterator<int>(fout, " "));
    return 0;
}

Пример 3:

В файле input.txt хранится список, содержащий информацию о людях: фамилия, имя, возраст. Считать эти данные в массив, отсортировать их по возрасту и записать в файл output.txt. Вывести на экран информацию о человеке, чей возраст более 20, но менее 25 лет.

Решение:

stdcpp03.cpp
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>

struct Man{
    std::string firstname, secondname;
    size_t age;
};

std::ostream& operator << (std::ostream& out, const Man& p){
    out << p.firstname << " " << p.secondname << " " << p.age;
    return out;
}

std::istream& operator >> (std::istream& in, Man& p){
    in >> p.firstname >> p.secondname >> p.age;
    return in;
}

struct comparator{
    comparator(){}
    bool operator ()(const Man& p1, const Man& p2){
        return p1.age < p2.age;
    }
};

struct Predicat{
    size_t begin, end;
    Predicat(int p1, int p2): begin(p1), end(p2) {}
    bool operator ()(const Man& p){
        return (p.age > begin) && (p.age < end);
    }
};

int main(){
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");

    std::vector<Man> v;
    std::vector<Man>::iterator i;

    std::copy(std::istream_iterator<Man>(fin), 
        std::istream_iterator<Man>(),
        std::inserter(v, v.end()));
    std::sort(v.begin(), v.end(), comparator());

    i = std::find_if(v.begin(), v.end(), Predicat(20, 25));
    std::cout << (*i) << std::endl;

    std::copy(v.begin(), 
        v.end(), 
        std::ostream_iterator<Man>(fout, "\n"));
    return 0;
}

Пример 4:

Сложение двух трехмерных векторов

#include <algorithm>
#include <array>
#include <iostream>
#include <functional>
#include <iterator>

typedef std::array<int, 3> v3d;

v3d operator + (const v3d& a, const v3d& b){
    v3d tmp;
    std::transform(
        a.begin(), a.end(), 
        b.begin(), 
        tmp.begin(), 
        std::plus<v3d::value_type>());
    return tmp;
}

std::ostream& operator << (std::ostream& out, const v3d p){
    std::copy(p.begin(), p.end(), std::ostream_iterator<v3d::value_type>(out, " "));
    return out;
}

int main(int argc, char** argv) {
    v3d a = {1, 2, 3},
            b = {3, 2, 1},
            c;
    c = a+b;
    std::cout << c;
    return 0;
}
Previousinplus: Как это работаетNextСтандартная библиотека С++/Вопросы

Last updated 1 year ago