Беспорядок на аннулировании итераторов в двухсторонней очереди

Некоторые из решений этой темы не работали для меня, поэтому я создаю другое решение. Может быть, это кому-нибудь пригодится.

/**
 * Get the color between two given colors
 * @param colorStart int color start of degradate
 * @param colorEnd int color end of degradate
 * @param percent int percent to apply (0 to 100)
 * @return int color of degradate for given percent
 */
public static int getColorOfDegradate(int colorStart, int colorEnd, int percent){
    return Color.rgb(
            getColorOfDegradateCalculation(Color.red(colorStart), Color.red(colorEnd), percent),
            getColorOfDegradateCalculation(Color.green(colorStart), Color.green(colorEnd), percent),
            getColorOfDegradateCalculation(Color.blue(colorStart), Color.blue(colorEnd), percent)
    );
}

private static int getColorOfDegradateCalculation(int colorStart, int colorEnd, int percent){
    return ((Math.min(colorStart, colorEnd)*(100-percent)) + (Math.max(colorStart, colorEnd)*percent)) / 100;
}
14
задан Community 23 May 2017 в 12:17
поделиться

2 ответа

Из стандартного рабочего проекта

шаблона void insert (позиция итератора, Сначала InputIterator, затем InputIterator);

1 Эффекты: Вставка посередине дек аннулирует все итераторы и ссылки на элементы дек. Вставка на обоих концах дек аннулирует все итераторы в двухстороннюю очередь, но не имеет влияние на действительность ссылок к элементам двухсторонней очереди ».

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

РЕДАКТИРОВАТЬ: В более свежем черновике говорится, по сути, то же самое (раздел 23.2.2.3)

13
ответ дан 1 December 2019 в 12:01
поделиться

В реализации SGI, вероятно, используется растущий массив, поэтому, если вставка вызывает рост массива, итераторы, указывающие на старый массив, недействительны.

РЕДАКТИРОВАТЬ:

Глядя в раздел 17.2.3 Третьего издания языка программирования C ++, я не вижу ничего в описании deque, которое указывает, какие операции сохраняют или отменяют итераторы. Возможно, я ищу не в том месте, или поведение может быть неопределенным.

0
ответ дан 1 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

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