И наконец, шаблон класса не компилируется и не проверяется на наличие ошибок до тех пор, пока не будет преобразован в реальный класс. Таким образом, программа, содержащая Аггау< Т >, может нормально компилироваться, несмотря на наличие в шаблоне очевидных синтаксических ошибок. Эти ошибки никак не проявят себя до тех пор, пока не будут созданы реальные классы наподобие Array< int > или Array< Student >.

_________________

316 стр. Часть 5. Полезные особенности

<p id="chapter28"><emphasis><strong>Глава 28. СТАНДАРТНАЯ БИБЛИОТЕКА ШАБЛОНОВ...317</strong></emphasis></p>

ОГЛАВЛЕНИЕ

       В этой главе...

►Контейнер string 317

►Контейнер list 320

►Итераторы 321

►Использование контейнера map 324

Некоторые программы сразу же пересылают получаемые данные, однако большинству программ приходится сначала сохранять информацию. Структуры, которые используются для хранения данных, называются контейнерами или коллекциями ( в моей книге это взаимозаменяемые понятия ). Пока что мы с вами в основном для хранения данных использовали массивы. Массив в качестве контейнера обладает рядом привлекательных свойств, в частности, высокой скоростью сохранения и выборки данных. Кроме того, можно объявить массив для хранения данных любого типа. Тем не менее и у массива есть свои существенные недостатки.

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

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

В настоящее время в состав С++ входит стандартная библиотека шаблонов ( Standard Template Library, STL ), включающая множество различных типов контейнеров, каждый из которых обладает своими достоинствами ( и, само собой, недостатками ).

«STL — весьма объёмная библиотека с массой сложно реализованных контейнеров. Весь приведённый здесь материал следует рассматривать как беглое знакомство лишь с некоторыми возможностями STL.»

[Советы]

<p id="chapter28.1"><strong>►Контейнер <emphasis>string...317</emphasis></strong></p>

Наиболее распространённым типом массива, по-видимому, является нуль-завершённая строка, используемая для вывода текста. В ней наиболее ярко проявляются как достоинства, так и недостатки массивов. Взгляните, насколько просто выглядит следующее выражение:

    cout << "Это обычная строка" ;

_________________

317 стр. Глава 28. Стандартная библиотека шаблонов

А вот как выглядит конкатенация двух строк:

    char* concatString( char* s1 , char* s2 )

    {

        int length = strlen( s1 ) + strlen( s2 ) + 1 ;

        char* s = new char[ length ] ;

        strcpy( s , s1 ) ;

        strcat( s , s2 ) ;

        return s ;

    }

Для работы со строками STL предоставляет контейнер string. Этот класс предоставляет программисту массу операций ( включая перегруженные операторы ), которые упрощают работу со строками символов. Та же конкатенация строк с использованием класса string выглядит гораздо проще:

    string concat( string s1 , string s2 )

    {

        return s1 + s2 ;

    }

«До сих пор в программах я старался избегать использования класса string, поскольку вы ещё с ним не знакомы. Однако большинство программистов используют этот класс гораздо чаще, чем массивы символов с завершающим нулевым элементом.»

[Помни!]

Приведённая далее программа демонстрирует несколько возможностей класса string.

    /* STLString — демонстрация простейших */

    /*           возможностей класса string из STL */

    #include

    #include

    #include

    using namespace std ;

Перейти на страницу:

Все книги серии Для чайников

Похожие книги