Линейный контейнер что это такое

Demurrage and Detention линейного контейнера

В публикации рассматривается тема платы за простой и использование линейного контейнера – Demurrage and Detention. Эти понятия очень важны в контейнерных перевозках и могут стать причиной больших незапланированных расходов. Если еще не читали, то стоит обратить внимание на статью об…

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такое

В публикации рассматривается тема платы за простой и использование линейного контейнера – Demurrage and Detention. Эти понятия очень важны в контейнерных перевозках и могут стать причиной больших незапланированных расходов.

Если еще не читали, то стоит обратить внимание на статью об участниках морской перевозки.

Простой линейного контейнера (Demurrage)

Простой (Demurrage) – плата, взимаемая линией за нахождение контейнера в порту. Период исчисляется с момента выгрузки контейнера с судна, до момента вывоза с территории порта. Обычно линия предоставляет 3-7 дней бесплатного периода, а далее взимает плату за каждый последующий день.

Не стоить путать Demurrage с портовым хранением – Storage. Это плата, взимаемая портом за хранение контейнера на своей территории. Бесплатный период зависит от конкретного терминала и стандартно составляет 5 дней. По факту истечения свободного периода порт также начинает взимать ежедневную плату.

Таким образом, основное отличие Demurrage и Storage – кто выставляет счет за нахождение контейнера в порту. Также стоит упомянуть, что портовое хранение не зависит от принадлежности контейнера (SOC или COC контейнер). Например, контейнер выгружается с судна 5 числа. Допустим, что линия дает 7 дней свободного простоя, а порт только 5 дней бесплатного хранения. Контейнер вывозится 15 числа, то есть находился на территории порта 11 дней. Следовательно, получатель или номинированный экспедитор получит 2 счета. Первый счет от линии за 4 дня сверхнормативного простоя (с 12 по 15 число включительно). Второй будет от порта за 7 дней сверхнормативного хранения (с 9 по 15 число включительно).

Использование линейного контейнера (Detention)

Использование (Detention) – плата, взимаемая линией, за использование контейнера вне порта. Период определяется с момента вывоза контейнера из порта, до возврата его линии. В случае использования линия предоставляет более длинный свободный период – 10-15 дней.

Рассмотрим пример, в котором линия дает 15 дней свободного периода использования. Контейнер вывезли из порта 15 числа и вернули 31, то есть получилось 17 дней использования. За это период линия выставит счет только за 2 дня (30 и 31 число).

Комбинированное использование линейного контейнера (Combined Demurrage and Detention)

Некоторые линии, например Maersk Line, могут совмещать плату за простой и использование контейнера. В таком случае, будет рассматриваться один период и будет одна ставка за день задержки. Линия обозначает количество бесплатных дней с момента выгрузки с судна до момента возврата контейнера. Портовое хранение (Storage) в таком случае взимается и рассчитывается независимо от линии. То есть, экспедитор может получить счет за портовое хранение, независимо от бесплатного периода комбинированного использования.

Причины возникновения Demurrage and Detention

В данном вопросе существует две стороны отношений – линия и получатель. Линия взимает плату, так как не может использовать контейнер в перевозке, пока он у получателя. Это означает, что актив, который должен приносить доход, простаивает. В связи с этим, линии важно, чтобы получатель оперативно вывез и вернул контейнер. Получатель может столкнуться со следующими проблемами, которые повлекут за собой сверхнормативный простой или использование контейнера:

Источник

Связи содержания в схемах сети

В этом разделе

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

Линейные, точечные и полигональные контейнеры в схемах сети

Содержимое и контейнер в инженерной сети или сети трассировки

Различные объекты сети, содержащие другие элементы сети, называются контейнерами, а объекты сети, содержащиеся внутри объектов, называются содержимым.

Независимо от типа контейнер сети в основном связан с набором содержимого. Эти связи учитывают правила содержания для инженерной сети или сети трассировки. Более того контейнер может содержать в себе другой контейнер.

Контейнеры и их содержимое в схемах сети

Обычно схемы сети создаются из набора объектов сети, выбранных на карте. Эти входные элементы сети называются исходными элементами для построения схем.

Являются ли они или нет исходными элементами для построения схем, контейнеры и содержимое часто видимы в созданных схемах сети. Более того когда содержимое визуально представлено в схеме, связанный с ним контейнер по умолчанию также отображается в схеме.

Примечание:

Обратное значение – false, оно означает, что контейнер может быть на схеме без какого-либо содержимого. Например, это происходит, когда ни один элемент из содержимого контейнера не является частью схемы, но контейнер был свернут.

Линейные контейнеры

Точечные контейнеры

Полигональные контейнеры

Примечание:

Когда объекты в созданной схеме отображаются в их географических местоположениях, каждый полигональный контейнер сети преобразуется в точку на схеме, которая размещается в барицентре полигонального объекта сети.

Содержание и контейнеры в схемах сети, построенных на основе трех установленных шаблонов

В момент создания для любой инженерной сети или сети трассировки есть три шаблона схем, на основе которых можно построить схемы сети – Basic, ExpandContainers и CollapseContainers.

Схемы Basic

Контейнер, который является точечным объектом или объектом соединения в сети, остается точкой в схеме Basic, пока некоторое или все его содержание также существует среди исходных элементов сети, использованных для создания схемы. В этом случае точечный объект или объект соединения контейнера становится прямоугольным полигоном в схеме Basic и отображается вокруг связанного содержания в полученной схеме.

Контейнер, который является полигональным объектом в сети, систематически преобразуется в полигон в схеме Basic, пока некоторое или все его содержание также существует среди исходных элементов сети, использованных для создания схемы. В этом случае полигональный объект контейнера преобразуется в прямоугольный полигон в схеме Basic и отображается вокруг связанного содержания в полученной схеме.

Контейнер, который является линейным объектом или объектом ребра в сети, отображается в схеме Basic как линейный объект, является или нет связанное с ним содержание исходными элементами для создания схемы.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение A1 – Выбор в качестве примера линейного контейнера на карте. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение A2—A Схема Basiс, созданная из примера линейного контейнера.

Изображение A1 показывает линейный контейнер, использующийся как единственный входной на карте сети для создания схемы Basic.

Изображение A2 иллюстрирует, как этот линейный контейнер и два точечных контейнера, с которыми он связан, представлены в полученной схеме Basic. Так как на карте в качестве входных не был выбран ни один объект содержания собственного контейнера, и ни один объект содержания связанных с ним точечных контейнеров, это содержание не показано в схеме Basic.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение A3 – Выбор в качестве примера линии не из содержимого. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение A4—A – Схема Basiс, созданная из примера линии, которая не является содержимым.

Изображение A3 показывает линейный объект сети, использующийся как единственный входной объект на карте сети для создания схемы Basic. Линия является стандартным элементом, то есть она не является ни содержимым, ни контейнером.

Изображение A4 иллюстрирует, как этот линейный объект сети и два точечных объекта сети, с которыми она связана, представлены в схеме Basic. Так как одна из конечных точек (та, что справа) является содержимым, она отображается в схеме с её контейнером, прямоугольным полигоном вокруг него.

Также его контейнер автоматически добавляется к схеме независимо от того, входит ли он в исходные данные или нет.

Контейнер, который в сети был точечным объектом или объектом соединения, становится прямоугольным полигоном в схеме Basic и отображается в схеме вокруг связанного содержания. Контейнер, который является линейным объектом или объектом ребра в сети, всегда отображается линией в схеме Basic.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение A5 – Выбор в качестве примера линии из содержимого на карте. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение A6—A Схема Basiс, созданная из примера линии, которая является содержимым.

Изображение A5 показывает линию из содержимого, использующуюся как входные данные на карте инженерной сети для создания схемы Basic.

Изображение A6 иллюстрирует, как эта линия из содержимого представлена в полученной схеме Basic. Связанный с ней линейный контейнер также отображается в схеме; это большая зеленая линия. Более того поскольку исходная линия из содержимого соединяет точки, которые сами по себе являются содержимым структурных соединений, эти контейнеры структурных соединений также представлены в схеме. Они отображаются как прямоугольные полигональные объекты, которые рисуются вокруг концов исходной линии из содержимого.

Схемы ExpandContainers

Контейнер, который является точечным объектом или объектом соединения в сети, всегда становится прямоугольным полигональным контейнером на схеме ExpandContainers и рисуется вокруг своего связанного содержимого, которое все представлено на схеме.

Контейнер, который является линейным объектом или объектом ребра в сети, отображается линейным объектом в схеме ExpandContainers. Все его связанное содержимое добавляется к схеме.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение B1 – Выбор в качестве примера линейного контейнера на карте. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение B2 – Схема ExpandContainers, созданная из примера линейного контейнера.

Изображение B1 показывает линейный контейнер, использующийся как единственный входной на карте сети для создания схемы ExpandContainers.

Изображение B2 иллюстрирует, как этот линейный контейнер и два точечных контейнера, с которыми он связан, представлены в полученной схеме ExpandContainers. Все его содержание и все содержание из связанных точечных контейнеров на концах линии отображается в схеме.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение B3 – Выбор в качестве примера линии из содержимого на карте. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение B4 – Схема ExpandContainers, созданная из примера линии, которая является содержимым.

Изображение B3 показывает линию из содержимого, использующуюся как входные данные на карте для создания схемы ExpandContainers.

Изображение B4 представляет созданную схему ExpandContainers с линией, которая является содержимым; связанный с ней линейный контейнер и все его содержание также отображаются на схеме. Более того поскольку исходная линия из содержимого соединяет точки, которые сами по себе являются содержимым соединений структуры, эти соединения структуры контейнеров также представлены в схеме. Они отображаются как прямоугольные полигональные объекты, которые рисуются вокруг концов линий содержимого.

Схемы CollapseContainers

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение С1 – Выбор в качестве примера линейного контейнера на карте. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение C2—A – Схема CollapseContainers, созданная из примера линейного контейнера.

Изображение C1 показывает линейный контейнер (зеленая широкая линия), использующийся как единственный входной на карте сети для создания схемы CollapseContainers.

Изображение C2 иллюстрирует, как этот линейный контейнер представлен в полученной схеме CollapseContainers. Он представлен как ребро схемы без какого-либо содержимого. Два прикрепления к структуре, связанных с контейнером, отображаются в схеме без содержимого.

Любой полигональный объект контейнера систематически преобразуется в свернутое соединение в схеме.

Любой точечный объект контейнера представлен в схеме в виде свернутого соединения.

Любой линейный объект не из содержимого или объект ребра, который может соединять точечные объекты содержимого, систематически переподключается, чтобы соединить связанный с ним узел свернутой схемы.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение С3 – Выбор в качестве примера линии из содержимого на карте. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение C4—A – Схема CollapseContainers, созданная из линии, которая является содержимым.

Изображение C3 показывает линию из содержимого, использующуюся как входные данные на картеи для создания схемы CollapseContainers.

Изображение C4 представляет полученную в результате схему, где нет линии из содержимого. Связанный с линией линейный контейнер добавлен к схеме на этапе Простейшего построения, и свернут в полученной в результате схеме. Более того, исходная линия из содержимого соединяется с точечными объектами, которые являются содержимым структурных соединений, эти точки содержимого и связанные с ними контейнеры отображались в схеме на этапе Простейшего построения. После выполнения правила Свернуть контейнеры эти контейнеры преобразованы в точечные контейнеры, в которых свернуты точки соединения из содержимого.

Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение С5 – Выбор в качестве примера линии не из содержимого. Линейный контейнер что это такое. Смотреть фото Линейный контейнер что это такое. Смотреть картинку Линейный контейнер что это такое. Картинка про Линейный контейнер что это такое. Фото Линейный контейнер что это такоеИзображение C6—A Схема CollapseContainers, созданная из линии, которая является содержимым.

Изображение C5 показывает линию, использующуюся как единственный входной объект на карте сети для создания схемы CollapseContainers. Линия является стандартным элементом, то есть она не является ни содержимым, ни контейнером.

Изображение C6 иллюстрирует, как эта стандартная линия и два точечных объекта, с которыми она связана, представлены в схеме CollapseContainers. Так как одно из соединений на окончании линии, то что справа, является содержимым, в полученной схеме эта линия больше не соединяет это содержимое. Она напрямую соединяет связанный контейнер, который был представлен как прямоугольный полигон на этапе Простейшего построения, а во время выполнения правила Свернуть контейнер полигон преобразуется в точку, свертывается все содержание контейнера, в том числе и соединение из содержимого.

Источник

Линейный контейнер что это такое

Кабмин одобрил концепцию управления дорожным движением на Евро-2012

Одесский порт нарастил грузооборот

Допустим, у Вас есть готовый к перевозке груз. С чего следует начать проработку вопроса транспортировки?

Для линейного агента, за спиной которого стоит крупная судоходная компания, больше характерна выжидательная позиция по отношению к потенциальному клиенту. Экспедитор, напротив, стремится привлечь к себе грузовладельца, предлагая ему не только мультимодальную транспортировку, но и выполнение таможенных и других формальностей, за что берется не каждый агент. Поэтому зачастую грузовладельцу при обращении к линейному агенту приходится дополнительно нанимать экспедитора для оформления документов.

Ставка фрахта как агента, так и экспедитора будет зависеть от следующих факторов:

Любая ставка основывается на линейном тарифе. Обычно агент, располагая линейным тарифом, продает указанную в нем ставку дальше экспедиторам и грузовладельцам. Однако часть экспедиторов, особенно крупных, имеют собственные устойчивые связи с различными линиями, поэтому получают от них ставки напрямую, в том числе и со скидками.

Предложенная в ответ на Ваш запрос ставка может выглядеть следующим образом, например :
USD 2100 / 40’ST FIOS SPB-NYC
или USD 2100 / 40’DV from Free in SPB to Free out NYC
что означает 2100 долл. США за один стандартный 40-футовый контейнер из порта Ст. Петербург до порта Нью-Йорк на условиях «free in and out»(без расходов по погрузке и выгрузке).

На условия, указанные в ставке, следует обратить особое внимание, поскольку от четкости их формулировки и Вашего понимания будут зависеть и Ваши транспортные издержки. В коммерческой практике приняты следующие основные сокращения для линейных условий транспортировки между различными портами:

В зависимости от практики линии или конкретного порта к ставке могут добавляться различные надбавок:

Кроме порта контейнер может быть доставлен до контейнерного терминала (container yard) вблизи порта или в глубине страны в зависимости от активности линии на данной территории. И конечно же, он может быть доставлен непосредственно до «двери» клиента. С учетом этого к основным линейным условиям могут добавляться такие, как:

При этом следует учитывать, что даже при перевозке Door-Door, т.е. «дверь»/»дверь», линия только подает контейнер по указанному адресу, но практически никогда не осуществляет затаривание/растаривание контейнера (stuffing/unstuffing). Этот вопрос грузоотправитель решает своими силами либо с помощью экспедитора.

Как происходит собственно перевозка?

Вы затариваете поданный перевозчиком контейнер, оформляете таможенные документы на таможенном терминале, при необходимости офомляете страховку и провожаете взглядом удаляющийся трейлер.

Далее следует период сладостного томления в надежде, что Ваш груз вот-вот достигнет своего пункта назначения. Вы, как благоразумный человек, заранее осведомились о дате прибытия контейнера и, памятуя о том, что указали все координаты грузополучателя, на некоторое время забываете о своем металлическом ящике.

Эффективная система слежения не только сократит Ваши косвенные издержки (напр, выполнение транзитного времени), но и поможет избежать оплаты сверхнормативного хранения в порту (взимается портом) и демереджа (штрафа за простой контейнера в порту, взимаемого линией), а это уже прямые расходы.

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

Вышеизложенное краткое описание линейной (контейнерной) перевозки не претендует на широкое освещение вопросов, связанных с контейнерным транспортом. Оно лишь призвано дать общее представление о механизме букирования грузовладельцу, мало знакомому с линейным бизнесом, а также может использоваться в качестве справочной информации.

Обращаем Ваше внимание, что речь идет только о базовых портах соответствующих континентов. Фидер из Средиземки на порты Северного Побережья Черного Моря осуществляется обычно через такие порты как:

На сегодня примерный уровень действующих ставок на рынке морских перевозок на основных направлениях, можно определить следующим образом:

Источник

Терминология (морские перевозки)

Условия перевозки

NB:
Условия ставки всегда состоят из 2 частей – информации по условиям отправления и прибытия. Например, FILO, LICY и т.д.:

Сборы к базовой ставке фрахта (оплачиваются линии в счет фрахта)

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

Дополнительные условия и сборы

Дополнительные условия и сборы оплачиваются местным агентам линии как правило через портовых экспедиторов.

Demurrage — демередж, или штрафные санкции, взимаемые за сверхнормативное использование контейнера с момента его выгрузки на терминал до момента возврата порожнего контейнера в порт (для импорта) или с момента получения порожнего контейнера под погрузку до момента погрузки груженого контейнера на судно (для экспорта).

Период использования контейнера иногда в зависимости от линии может быть разделен на Demurrage и Detention (демередж и детеншн). Тогда Demurrage — это штрафные санкции, взимаемые за сверхнормативное использование контейнера с момента его выгрузки на терминал до момента вывоза с терминала. Detention — штрафные санкции, взимаемые за сверхнормативное использование контейнера с момента его вывоза с терминала до момента возврата порожнего контейнера в порт.

AdministrativeFee = B/LFee = DocsFee (возможны другие обозначения) — сборы местного агента линии за оформление документов. Могут взиматься за коносамент или за контейнер.

Дополнительные сборы порта

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

Источник

Снова про STL: контейнеры

В предыдущей заметке речь шла о массивах как прототипе и прародителе контейнеров. Теперь дошла очередь до собственно контейнерных классов и поддерживающих их библиотек.

Под термином библиотека стандартных шаблонов (STL, Standard Template Library) понимают набор интерфейсов и компонентов, первоначально разработанных Александром Степановым, Менг Ли и другими сотрудниками AT&T Bell Laboratories и Hewlett-Packard Research Laboratories в начале 90-х годов (хотя и позже ещё весьма многие приложили руку к тому, что стало на сегодня стандартным компонентом C++). Далее библиотека STL перешла в собственность компании SGI, а также была включена как компонент в набор библиотек Boost. И наконец библиотека STL вошла в стандарты C++ 1998 и 2003 годов (ISO/IEC 14882:1998 и ISO/IEC 14882:2003) и с тех пор считается одной из составных частей стандартной библиотек C++.

Стандарт не называет эту часть библиотеки STL, но эту хронологию хорошо бы учитывать, разбираясь с какой версией компилятора, языка и литературы вы имеете дело — в процессе сокращения HP STL до размеров, подходящих для стандартизации, часть алгоритмов и функторов выпали из состава библиотеки, а кое-что, со временем, и добавляется (например, расширение набора переопределенных прототипов некоторых методов контейнеров). По тексту будет использоваться традиционное название STL только чтобы было ясно какую часть стандартной библиотеки C++ мы имеем в виду.

Первоначальной целью STL (это хорошо видно из хронологии комментариев в заголовочных файлах) было создание боле гибкой модели регулярных контейнеров по сравнению с массивами и обобщение на них некоторых широко используемых алгоритмов (таких как поиск, сортировка и некоторых других). Но затея оказалась плодотворнее первоначальных намерений, и была существенно расширена. STL вводит ряд понятий и структур данных, которые почти во всех случаях позволяют сильно упростить программный код. Вводятся следующие категории понятий:

Центральным понятием STL, вокруг которого крутится всё остальное, это контейнер (ещё используют термин коллекция). Контейнер — это набор некоторого количества обязательно однотипных элементов, упакованных в контейнер определённым образом. Простейшим прототипом контейнера в классическом языке C++ является массив. Тот способ, которым элементы упаковываются в контейнер и определяет тип контейнера и особенности работы с элементами в таком контейнере. STL вводит целый ряд разнообразных типов контейнеров, основные из них:

элементов типа float. Далее мы видим такие методы класса vector как max_size() — максимально возможная длина векторов вообще (константа реализации), size() — текущий размер (число элементов) вектора, capacity() — текущая ёмкость вектора, максимальное число элементов, которое может быть помещено в вектор в текущем его размещении. Выполнение этого фрагмента даст что-то примерно следующее (детали могут различаться в зависимости от реализации):

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

Примечание: Показанное выше удвоение ёмкости вектора при переразмещении — это характерное поведение для реализации библиотек компилятора GCC. Но точный алгоритм резервирования ёмкости под будущие элементы стандарт оставляет на волю реализатора, поэтому на него нельзя рассчитывать, и описан он здесь только для качественного понимания картины (реализации Visual Studio ведут себя по-другому, резервируя только небольшой избыток… это вы изучите сами).

Отметим на дальнейшее, пока без комментариев, то важное обстоятельство, что операции помещения элементов в контейнер выполняет копирование элемента, что влечёт за собой а).требование наличия копирующего конструктора для типа элементов и б).для структурных элементов это может привести к заметным затратам производительности.

Таким образом мы получили эквивалент массива C++, размер которого (size()) динамически меняется в произвольных пределах от нескольких единиц до миллионов элементов. Обратим внимание (это очень важно), что увеличение размера вектора достигается ни в коем случае не индексацией за пределы его текущего размера, а «заталкиванием» (метод push_back()) нового элемента в конец вектора (симметрично, метод pop_back() выталкивает последний элемент из массива и уменьшает его size()). Другой способ изменить размер вектора — это сразу вызвать методы resize() под нужный размер. Именно потому, что размер вектора, в отличие от массива, может динамически меняться, для вектора предусмотрено 2 разных способа индексации: как операция [ i ] и как метод-функция at( i ). Они различаются: метод at() проверяет текущий размер вектора size(), и при индексации за его границу возбуждает исключение. Напротив, операция индексации не проверяет границу, что небезопасно, но зато это быстрее. Метод at() позволяет нам контролировать выход за границы вектора и либо квалифицировать это как логическую ошибку, либо корректировать текущий размер контейнера под потребность, как в вот таком фрагменте (здесь попыток доступа вдвое больше, чем реально выполненных операций):

Стандарт C++11 привносит дополнительные выразительные средства, такие, например, как списки инициализации и выводимость типов, которые намного упрощают работу с контейнерами (и даже делают ненужными старые привычные приёмы записи). Вот как может описываться матрица, когда одновременно описываются её а). конфигурация (квадратная, хотя может быть прямоугольная и даже треугольная), b). размерность (3х3) и c). инициализирующие значения:

А заодно, здесь же показана работа с векторами (транспонирование квадратной матрицы и вывод в выходной поток) как с псевдо-массивами (пользуясь только индексированием), чем вектора, по существу, и являются (в частности, показано как тип элемента вектор определяется на основании выводимого типа по стандарту C++11):

Примечание: В рамках того, что мы уже знаем о векторах, возникает иногда вопрос: а как строго должен определяться тип возвращаемого size() результата (чтобы избежать зависимости от платформы) и, соответственно, любых переменных циклов, оперирующих с размером вектора? Временами от блюстителей чистоты синтаксиса следует ответ, что это должен быть size_t, и этот ответ — неверный (тем более, что для многих платформ size_t и определяется как unsigned int). Если вы захотите записать абсолютно строгого определение типа size() вектора, то строку в примере выше следует записать вот так:

Или, полагаясь на выводимость типов C++11, вот так:

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *