С++ для начинающих




Как определить последовательный контейнер? - часть 3


ivecl != ivec4 //true

ivecl > ivec2 //true

ivec3 > ivecl //true

ivec5 > ivec2 //true

Существуют три ограничения на тип элементов контейнера (практически это касается только пользовательских классов). Для должны быть определены:

  • операция “равно”;
  • операция “меньше” (все операции сравнения контейнеров, о которых говорилось выше, используют только эти две операции сравнения);
  • значение по умолчанию (для класса это означает наличие конструктора по умолчанию).
  • Все предопределенные типы данных, включая указатели и классы из стандартной библиотеки С++ удовлетворяют этим требованиям.

    Упражнение 6.5

    Объясните, что делает данная программа:

    #include <string>

    #include <vector>

    #include <iostream>

    #int main()

    {

        vector<string> svec;

        svec.reserve( 1024 );

        string text_word;

        while ( cin >> text_word )

            svec.push_back( text_word );

        svec.resize( svec.size()+svec.size()/2 );

        // ...

    }

    Упражнение 6.6

    Может ли емкость контейнера быть меньше его размера? Желательно ли, чтобы емкость была равна размеру: изначально или после вставки элемента? Почему?

    Упражнение 6.7

    Если программа из упражнения 6.5 прочитает 256 слов, то какова наиболее вероятная емкость контейнера после изменения размера? А если она считает 512 слов? 1000? 1048?

    Упражнение 6.8

    Какие из данных классов не могут храниться в векторе:

    (a) class cl1 {

    public:

        c11( int=0 );

        bool operator==();

        bool operator!=();

        bool operator<=();

        bool operator<();

    // ...

    };

    (b) class c12 {

    public:

        c12( int=0 );

        bool operator!=();

        bool operator<=();

        // ...

    };

    (с) class c13 {

    public:

        int ival;

    };

    (d) class c14 {

    public:

        c14( int, int=0 );

        bool operator==();

        bool operator!=();

        // ...

    }




    Содержание  Назад  Вперед