Подключение стандартной библиотеки C++

В программировании на C++ стандартная библиотека является очень важным компонентом.

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

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

Что такое стандартная библиотека C++?

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

Цель проектирования стандартной библиотеки — предоставить эффективные, переносимые и простые в использовании инструменты, помогающие разработчикам быстро создавать приложения.


Как импортировать стандартную библиотеку C++?

1. Используйте #include для включения заголовочных файлов

В C++ мы используем#includeДирективы препроцессора используются для импорта заголовочных файлов стандартной библиотеки.

#includeДиректива сообщает компилятору вставить содержимое указанного заголовочного файла в текущий файл во время компиляции. Заголовочные файлы обычно содержат объявления функций, определения классов, определения макросов и другое содержимое.

Базовый синтаксис

Синтаксис импорта стандартной библиотеки C++ выглядит следующим образом:

#include <header_file>

где,<header_file>— это имя заголовочного файла стандартной библиотеки.

Пример

Пример

#include <iostream> // импорт библиотеки потоков ввода-вывода
#include <vector> // импорт библиотеки контейнера vector
#include <cmath> // импорт библиотеки математических функций

В приведённом выше примере мы импортировали три часто используемых заголовочных файла стандартной библиотеки:

  • <iostream>: обеспечивает функциональность потоков ввода-вывода, напримерstd::coutиstd::cin。
  • <vector>Обеспечивает реализацию контейнера vector, который используется для хранения динамических массивов.
  • <cmath>: предоставляет общие математические функции, такие какsqrt()、sin()、cos()и т. д.

2. Использование модулей для импорта стандартной библиотеки (C++20/C++23)

Начиная с C++20, в C++ были введены модули, а в C++23 поддержка модулей стандартной библиотеки была дополнительно улучшена.

Модули обеспечивают более эффективный и безопасный способ импорта стандартной библиотеки.

  • Более высокая скорость компиляцииМодули компилируются только один раз, а последующие импорты напрямую используют скомпилированный бинарный интерфейс.

  • Лучшая изоляцияМодули не раскрывают макроопределения и приватные символы, что позволяет избежать конфликтов имён.

  • Чёткие зависимостиМеханизм импорта и экспорта модулей делает зависимости кода более чёткими.

Пример

import std;// импортировать всю стандартную библиотеку (C++23возможности)

int main() {
    std::cout << "Hello, C++23 Modules!\n";// использовать std::cout для вывода
    return 0;
}

Или импортировать отдельные части стандартной библиотеки:

Пример

import std.core;// импортировать основную библиотеку
import std.iostream;// импортировать библиотеку потоков ввода-вывода

int main() {
    std::cout << "Hello, C++23 Modules!\n";
    return 0;
}

В настоящее время поддержка модулей C++ основными компиляторами постепенно улучшается.

Ниже приведены статус поддержки и способы использования некоторых компиляторов:

GCCТребуется включить стандарт C++23 и поддержку модулей.

Пример команды компиляции:

g++ -std=c++23 -fmodules-ts -o program main.cpp

ClangТребуется включить стандарт C++23 и поддержку модулей.

Пример команды компиляции:

clang++ -std=c++23 -fmodules -o program main.cpp

MSVC(Visual Studio)Требуется включить стандарт C++23 и поддержку модулей.

Пример команды компиляции:

cl /std:c++23 /experimental:module /EHsc /Fe:program main.cpp

Распространённые заголовочные файлы стандартной библиотеки C++

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

Ниже приведены некоторые распространённые заголовочные файлы стандартной библиотеки и их применение:

<iostream>

<iostream>Это один из наиболее часто используемых заголовочных файлов в стандартной библиотеке C++, предоставляющий функциональность потоков ввода-вывода. Через этот заголовочный файл мы можем использоватьstd::coutиstd::cinдля выполнения стандартного вывода и ввода.

Пример

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

<vector>

<vector>предоставляет реализацию контейнера vector. vector — это динамический массив, который может динамически изменять свой размер во время выполнения. Он предоставляет множество полезных функций-членов, таких какpush_back()、size()и т. д.

Пример

#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    vec.push_back(6);
    for (int i : vec) {
        std::cout << i << " ";
    }
    return 0;
}

<cmath>

<cmath>Он предоставляет часто используемые математические функции, такие как квадратный корень, тригонометрические функции, экспоненциальные функции и т. д. Эти функции обычно используются для численных вычислений.

Пример

#include <cmath>
#include <iostream>

int main() {
    double x = 4.0;
    double y = std::sqrt(x);
    std::cout << "Квадратный корень из " << x << " равен " << y << std::endl;
    return 0;
}

<string>

<string>Он предоставляет реализацию класса string. Класс string в C++std::stringпроще в использовании, чем символьные массивы в C, и предоставляет множество полезных функций-членов, таких какlength()、substr()и т. д.

Пример

#include <string>
#include <iostream>

int main() {
    std::string str = "Hello, C++!";
    std::cout << "Длина строки: " << str.length() << std::endl;
    return 0;
}

<algorithm>

<algorithm>Он предоставляет множество часто используемых алгоритмов, таких как сортировка, поиск, обход и т. д. Эти алгоритмы можно применять к различным контейнерам, таким как векторы, списки и т. д.

Пример

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

int main() {
    std::vector<int> vec = {5, 3, 1, 4, 2};
    std::sort(vec.begin(), vec.end());
    for (int i : vec) {
        std::cout << i << " ";
    }
    return 0;
}

Примечания

  • namespaceФункции и классы в стандартной библиотеке C++ обычно находятся вstdпространстве имен. Поэтому при использовании этих функций и классов обычно нужно добавитьstd::префикс, или использоватьusing namespace std;чтобы избежать повторного вводаstd::。

  • Защита заголовочных файловПри написании собственных заголовочных файлов обычно нужно использовать защиту от повторного включения (header guards), чтобы предотвратить дублирующее включение. Заголовочные файлы стандартной библиотеки уже включают эти механизмы защиты, поэтому нам не нужно беспокоиться о дублирующем включении.

  • СовместимостьСтандартная библиотека C++ может иметь некоторые различия в разных компиляторах и на разных платформах. Поэтому при написании кроссплатформенного кода нужно обращать внимание на эти различия и обеспечивать корректную работу кода в разных средах.

Другие расширения