Встроенные типы, рассмотренные в главе 2, определены непосредственно языком С++. Эти типы представляют средства, которые сами по себе присущи большинству компьютеров, такие как числа или символы. Стандартная библиотека определяет множество дополнительных типов, высокоуровневый характер которых аппаратными средствами компьютеров, как правило, не реализуется непосредственно.
В данной главе представлены два важнейших библиотечных типа: string
и vector
. Тип string
— это последовательность символов переменной длины. Тип vector содержит последовательность объектов указанного типа переменной длины. Мы также рассмотрим встроенный тип массива. Как и другие встроенные типы, массивы представляют возможности аппаратных средств. В результате массивы менее удобны в использовании, чем библиотечные типы string
и vector
.
Однако, прежде чем начать исследование библиотечных типов, рассмотрим механизм, упрощающий доступ к именам, определенным в библиотеке.
using
До сих пор имена из стандартной библиотеки упоминались в программах явно, т.е. перед каждым из них было указано имя пространства имен std
. Например, при чтении со стандартного устройства ввода применялась форма записи std::cin
. Здесь использован ::
(см. раздел 1.2). Он означает, что имя, указанное в правом операнде оператора, следует искать в области видимости, указанной в левом операнде. Таким образом, код std::cin
означает, что используемое имя cin
определено в пространстве имен std
.
При частом использовании библиотечных имен такая форма записи может оказаться чересчур громоздкой. К счастью, существуют и более простые способы применения членов пространств имен. Самый надежный из них — using
(using
declaration). Другие способы, позволяющие упростить использование имен из других пространств, рассматриваются в разделе 18.2.2.
Объявление using
позволяет использовать имена из другого пространства имен без указания префикса
. Объявление using
имеет следующий формат:
using
После того как объявление using
было сделано один раз, к указанному в нем имени можно обращаться без указания пространства имен.
#include
//
//
using std::cin;
int main() {
int i;
cin >> i; //
cout << i; //
//
std::cout << i; //
//
return 0;
}
using
Каждое объявление using
применяется только к одному элементу пространства имен. Это позволяет жестко задавать имена, используемые в каждой программе. Например, программу из раздела 1.2 можно переписать следующим образом:
#include
//
using std::cin;
using std::cout;
using std::endl;
int main() {
cout << "Enter two numbers:" << endl;
int v1, v2;
cin >> v1 >> v2;
cout << "The sum of " << v1 << " and " << v2
<< " is " << v1 + v2 << endl;
return 0;
}
Объявления using
для имен cin
, cout
и endl
означают, что их можно теперь использовать без префикса std::
. Напомню, что программы С++ позволяют поместить каждое объявление using
в отдельную строку или объединить в одной строке несколько объявлений. Важно не забывать, что для каждого используемого имени необходимо отдельное объявление using
, и каждое из них должно завершаться точкой с запятой.
using
Код в заголовках (см. раздел 2.6.3) обычно не должен использовать объявления using
. Дело в том, что содержимое заголовка копируется в текст программы, в которую он включен. Если в заголовке есть объявление using
, то каждая включающая его программа получает то же объявление using
. В результате программа, которая не намеревалась использовать определенное библиотечное имя, может случайно столкнуться с неожиданным конфликтом имен.