2010-07-24 5 views
3

Есть ли другой способ определить размер контейнера, чем:Способ определения размера контейнера

//those are valid iterators from a container 
BidIt begin; 
BidIt end; 
std::size_t size = 0; 

while (begin != end) 
{//Here throug iterating I'm getting adventually the correct size 
    ++size; 
    ++begin; 
} 

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

+1

Какие типы контейнеров вы используете? Является ли BidIt шаблоном? – 2010-07-24 16:33:54

+1

Большинство стандартных контейнеров имеют встроенный метод измерения размера! –

+0

@Martin вы не можете увидеть это из моего примера (моя ошибка), но мне нужно определить размер с помощью fnc, который принимает только итераторы в этот контейнер. –

ответ

5

Вы можете использовать функцию distance. Обратите внимание, что если ваши итераторы неRandomAccessIterators функция расстояния будет использовать в основном тот же метод расчета расстояния, которое вы указали.

+0

BUt, если они являются произвольным доступом, тогда .... –

+0

@Martin: Затем он просто вычитает их. Я только добавил, что последний бит, чтобы @ A-ha знал, что метод looping не так уж плох. –

0

В качестве альтернативы вы можете добавить дополнительный размер члена к типу BidIt и обновлять его всякий раз, когда в контейнере выполняется операция вставки или удаления, а также метод getter для получения размера.

Смежные вопросы