Язык программирования C++. Вводный курс


Как определить последовательный контейнер? - часть 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!=();

    // ...

}




Начало  Назад  Вперед



Книжный магазин