Из комментариев и ответа sftrabbit вы можете видеть, что реляционные операторы определены только для итераторов произвольного доступа, а std::list
имеет только двунаправленные итераторы. Поэтому для вашей проблемы существует несколько решений:
std::vector
или std::array
. Они предоставляют итераторы с произвольным доступом, имеют лучшую производительность для меньших размеров и в зависимости от того, как вы их заполняете и используете для больших размеров, а также имеют лучший размер памяти. Это предпочтительное решение, я бы назвал его «стандартным» решением. Используйте другие контейнеры только в том случае, если существует очень хорошая измеримая причина (например, профилировщик говорит вам, что использование этого контейнера является узким местом производительности). for (size_t i = 0, count = families.size()/2;
i < count;
++i, --itSmallFamily, ++itLargeFamily)
{ /* do stuff */ }
Нет встроенного метода для получения размера / длины / количества словаря AS3.
Есть обходные пути: например, вы можете создать собственный класс словаря, который расширяет или обертывает класс flash.utils.Dictionary
, добавляя функции счетчика. Вы можете управлять подсчетом по мере добавления / удаления записей или подсчитывать по запросу, используя простую итерацию цикла For:
public static function countKeys(myDictionary:flash.utils.Dictionary):int
{
var n:int = 0;
for (var key:* in myDictionary) {
n++;
}
return n;
}