Elementor Header #8

37. Стандартная библиотека

1. Введение

Стандартная библиотека C++ представляет собой набор библиотек, предоставляющих множество функций и классов для упрощения разработки программ. Она включает в себя такие компоненты, как контейнеры, алгоритмы, ввод-вывод и работу с числовыми данными. Знание и эффективное использование стандартной библиотеки существенно ускоряет разработку и улучшает качество кода. В этом уроке мы рассмотрим основные компоненты стандартной библиотеки C++ и покажем, как их использовать.

2. Основные компоненты стандартной библиотеки

Ввод/вывод (I/O)

Для работы с вводом и выводом в C++ используются потоки ввода/вывода, которые включают в себя заголовочные файлы <iostream>, <fstream> и <sstream>.

Пример:

				
					#include <iostream>
#include <fstream>
#include <sstream>

int main() {
    // Использование std::cout для вывода на экран
    std::cout << "Hello, World!" << std::endl;

    // Использование std::ofstream для записи в файл
    std::ofstream outFile("example.txt");
    if (outFile.is_open()) {
        outFile << "Hello, file!" << std::endl;
        outFile.close();
    }

    // Использование std::ifstream для чтения из файла
    std::ifstream inFile("example.txt");
    std::string line;
    if (inFile.is_open()) {
        while (std::getline(inFile, line)) {
            std::cout << line << std::endl;
        }
        inFile.close();
    }

    return 0;
}

				
			

Контейнеры

Стандартная библиотека предоставляет множество контейнеров, таких как std::vector, std::list, std::map, std::set и другие. Контейнеры позволяют хранить и управлять коллекциями объектов.

Пример:

				
					#include <iostream>
#include <vector>
#include <map>

int main() {
    // Использование std::vector
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // Использование std::map
    std::map<std::string, int> ageMap;
    ageMap["Alice"] = 30;
    ageMap["Bob"] = 25;
    for (const auto& pair : ageMap) {
        std::cout << pair.first << " is " << pair.second << " years old." << std::endl;
    }

    return 0;
}

				
			

Алгоритмы

Стандартная библиотека включает в себя набор алгоритмов для выполнения различных операций над контейнерами, таких как сортировка, поиск и изменение элементов.

Пример:

				
					#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {5, 3, 8, 1, 2};
    
    // Сортировка векторa
    std::sort(numbers.begin(), numbers.end());

    // Поиск элемента
    auto it = std::find(numbers.begin(), numbers.end(), 3);
    if (it != numbers.end()) {
        std::cout << "Found 3 in the vector!" << std::endl;
    }

    // Вывод отсортированного вектора
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

				
			

Умные указатели

Умные указатели (например, std::unique_ptr и std::shared_ptr) предоставляют автоматическое управление памятью, что помогает избежать утечек памяти и улучшить безопасность кода.

Пример:

				
					#include <iostream>
#include <memory>

class MyClass {
    public:
        MyClass() { std::cout << "MyClass constructed!" << std::endl; }
        ~MyClass() { std::cout << "MyClass destroyed!" << std::endl; }
};

int main(){
    // Использование std::unique_ptr
    std::unique_ptr<MyClass> uniquePtr = std::make_unique<MyClass>();

    // Использование std::shared_ptr
    std::shared_ptr<MyClass> sharedPtr1 = std::make_shared<MyClass>();
    std::shared_ptr<MyClass> sharedPtr2 = sharedPtr1;

    return 0;
}

				
			

Строки

Стандартная библиотека предоставляет класс std::string для работы со строками, который поддерживает различные операции, такие как конкатенация, поиск и замена.

Пример:

				
					#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, ";
    str += "World!";
    std::cout << str << std::endl;

    std::string subStr = str.substr(7, 5);
    std::cout << "Substring: " << subStr << std::endl;

    return 0;
}

				
			

Заключение

Стандартная библиотека C++ предоставляет мощные инструменты для упрощения разработки программ. Знание основных компонентов библиотеки, таких как контейнеры, алгоритмы, ввод-вывод и умные указатели, поможет вам писать более эффективный и надёжный код. Используйте стандартную библиотеку для решения повседневных задач программирования и улучшения качества вашего кода.

3. Тестовое задание

Напишите программу на C++, которая выполняет следующие задачи:

  1. Создаёт std::vector целых чисел и заполняет его случайными значениями от 1 до 100.
  2. Сортирует вектор в порядке убывания.
  3. Находит и выводит на экран количество элементов, равных 50, используя алгоритм std::count.
  4. Сохраняет отсортированный вектор в файл с помощью std::ofstream.
  5. Читает отсортированный вектор из файла и выводит его содержимое на экран.

Примерный код:

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

int main() {
    // Шаг 1: Создание и заполнение вектора
    std::vector<int> numbers(10);
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 100);

    for (int& num : numbers) {
        num = dis(gen);
    }

    // Шаг 2: Сортировка вектора в порядке убывания
    std::sort(numbers.begin(), numbers.end(), std::greater<int>());

    // Шаг 3: Подсчёт количества элементов, равных 50
    int count50 = std::count(numbers.begin(), numbers.end(), 50);
    std::cout << "Количество элементов, равных 50: " << count50 << std::endl;

    // Шаг 4: Сохранение вектора в файл
    std::ofstream outFile("sorted_numbers.txt");
    if (outFile.is_open()) {
        for (const int& num : numbers) {
            outFile << num << " ";
        }
        outFile.close();
    }

    // Шаг 5: Чтение вектора из файла
    std::ifstream inFile("sorted_numbers.txt");
    std::vector<int> readNumbers;
    int num;
    if (inFile.is_open()) {
        while (inFile >> num) {
            readNumbers.push_back(num);
        }
        inFile.close();
    }

    // Вывод прочитанного содержимого
    std::cout << "Содержимое файла: ";
    for (const int& num : readNumbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

				
			

Этот пример продемонстрирует основные операции со стандартной библиотекой, включая использование контейнеров, алгоритмов и потоков ввода/вывода.

logo