Существуют три ограничения на тип
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!=();
// ...
}
Содержание Назад Вперед