Нахождение владельца итератора STL

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


                src/main/resources/liquibase.properties
                false

Вот полная информация:

http://blog.nutpan.com/2012/03/liquibase-maven-plugin-issue-with-non.html [111 ]

6
задан Evan Teran 23 October 2018 в 14:20
поделиться

7 ответов

Я не верю так. Если бы итераторы должны были сохранить ссылку/указатель на свой контейнер владения, то для них было бы невозможно быть оптимизированным вниз к легкому указателю (который может быть сделан с контейнерами, гарантирующими непрерывное устройство хранения данных как векторы и такой).

7
ответ дан 8 December 2019 в 13:03
поделиться

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

#include <algorithm>
#include <cstdio>
#include <cstring>

int
main(int argc, char *argv[])
{
        const char s[] = "Hello, world!";
        const char *begin = s;
        const char *end = s + strlen(s);

        std::for_each(begin, end, putchar);

        return 0;
}

Как Вы могли получить исходную строку от указателя (если на нее не указывают в начале строки)?

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

3
ответ дан 8 December 2019 в 13:03
поделиться

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

  • Бессмысленный. Итераторы выполняют итерации по набору. Как другой сказанный, только что, ничто больше.
  • Не совместимый с требованиями итератора. Помните, что указатель является итератором произвольного доступа. Помещение контейнерного указателя в итератор было бы бесполезно для алгоритмов, так как они намереваются быть универсальными, отделенными от определенных реализаций итератора. Указатель, используемый в качестве итератора, не может иметь указателя назад на массив, от которого он был взят в качестве участника.

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

5
ответ дан 8 December 2019 в 13:03
поделиться

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

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

Я могу спросить, каков Ваш пример использования, что необходимо знать "диапазон" контейнера с итератором?

0
ответ дан 8 December 2019 в 13:03
поделиться

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

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

0
ответ дан 8 December 2019 в 13:03
поделиться

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

ДЕЙСТВИТЕЛЬНО необходимо знать все векторы кандидата, по которым можно проверить впереди, и это не общий способ получить контейнер, которому принадлежит итератор.

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

2
ответ дан 8 December 2019 в 13:03
поделиться

STL не допускает это.

Итераторы Vecor, например, могут быть реализованы просто как указатель. И нет никакого общего способа получить объект от указателя, указывающего на некоторые данные, которые выделил объект.

1
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: