Программирование >>  Инициализация объектов класса, структура 

1 ... 82 83 84 [ 85 ] 86 87 88 ... 395


кажд нов элемент получает значение piglet svec.resize( 2 * svec.size(), piglet );

Кстати, какова наиболее вероятная емкость svec при определении, если его начальный размер равен 24? Правильно, 24! В общем случае минимальная емкость вектора равна его текущему размеру. При удвоении размера емкость, как правило, тоже удваивается

vector< string > svec2( svec );

М1 можем инициализировать новый контейнер с помощью существующего. Например:

list< int > ilist2 ( ilist ) ;

Каждый контейнер поддерживает полный набор операций сравнения: равенство, неравенство, меньше, больше, меньше или равно, больше или равно. Сопоставляются попарно все элементы контейнера. Если они равны и размеры контейнеров одинаковы, то эти контейнеры равны; в противном случае - не равны. Результат операций больше или меньше определяется сравнением первых двух неравных элементов. Вот что печатает программа, сравнивающая пять векторов:

9 12

8 13

ivecl: 1 3

ivec2: 0 1 1 2 3 5 ivec3: 1 3 9

ivec4: 1 3 5 7

ivec5: 2 4

первый неравный элемент: 1, О ivecl больше чем ivec2 ivecl < ivec2 false ivec2 < ivecl true

первый неравный элемент: 5, 9 ivecl < ivec3 true

все элементы равны, но ivec4 содержит меньше элементов следовательно, ivec4 меньше, чем ivecl ivecl < ivec4 false

первый неравный элемент: 1, 2 ivecl < ivec5 true

ivecl == ivecl true ivecl == ivec4 false ivecl != ivec4 true

ivecl > ivec2 true ivec3 > ivecl true ivec5 > ivec2 true

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

операция равно ;

операция меньше (все операции сравнения контейнеров, о которых говорилось выше, используют только эти две операции сравнения);

значение по умолчанию (для класса это означает наличие конструктора по умолчанию).



#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

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

Все предопределенные типы данных, включая указатели и классы из стандартной библиотеки С++ удовлетворяют этим требованиям.

Упражнение 6.5



6.5. Итераторы

Итератор предоставляет обобщенный способ перебора элементов любого контейнера -как последовательного, так и ассоциативного. Пусть iter является итератором для какого-либо контейнера. Тогда

++iter;

перемещает итератор так, что он указывает на следующий элемент контейнера, а

*iter;

разыменовывает итератор, возвращая элемент, на который он указывает. Все контейнеры имеют функции-члены begin() и end() .

begin() возвращает итератор, указывающий на первый элемент контейнера.

end() возвращает итератор, указывающий на элемент, следующий за последним в контейнере.

for (

iter !=

iter = container. begin(); iter != container.end(); ++iter )

Чтобы перебрать все элементы контейнера, нужно написать:

(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!=();

...



1 ... 82 83 84 [ 85 ] 86 87 88 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика