Некоторые из решений этой темы не работали для меня, поэтому я создаю другое решение. Может быть, это кому-нибудь пригодится.
/**
* 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;
}
Из стандартного рабочего проекта
шаблона
void insert (позиция итератора, Сначала InputIterator, затем InputIterator); 1 Эффекты: Вставка посередине дек аннулирует все итераторы и ссылки на элементы дек. Вставка на обоих концах дек аннулирует все итераторы в двухстороннюю очередь, но не имеет влияние на действительность ссылок к элементам двухсторонней очереди ».
Итак, оба верны. Как указывает Джозаттис, вставка спереди или сзади не делает недействительными ссылки на элементы двухсторонней очереди, а только итераторы на саму двухстороннюю очередь .
РЕДАКТИРОВАТЬ: В более свежем черновике говорится, по сути, то же самое (раздел 23.2.2.3)
В реализации SGI, вероятно, используется растущий массив, поэтому, если вставка вызывает рост массива, итераторы, указывающие на старый массив, недействительны.
РЕДАКТИРОВАТЬ:
Глядя в раздел 17.2.3 Третьего издания языка программирования C ++, я не вижу ничего в описании deque, которое указывает, какие операции сохраняют или отменяют итераторы. Возможно, я ищу не в том месте, или поведение может быть неопределенным.