Вместо использования алгоритмов C++ <алгоритм>
Несколько алгоритмов STL имеют общий вид:
Algorithm(InputIterator first1, InputIterator last1, OutputIterator result,...)
или же
Algorithm(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result,...)
Мой вопрос - когда может OutputIterator result
быть в диапазоне (first1,last1)
или же (first2,last2)
?
За transform
Ответ я нашел здесь: http://www.cplusplus.com/reference/algorithm/transform/
Но есть множество других, которые могут иметь смысл, например, set_difference
должен теоретически быть безопасным для такого использования, а также работать в коде с GCC 4.7.1.
Любые ссылки?
1 ответ
Нет общего ответа для всех алгоритмов. За set_difference
из C++11 25.4.5.4/2 вы можете узнать, что:
Requires: The resulting range shall not overlap with either of the original ranges.
Это, кажется, делает ваш код неопределенным поведением, которое, кажется, делает то, что вы хотите.
Вам просто нужно взглянуть на требования для конкретного алгоритма, прежде чем вы решите, какие диапазоны итераторов использовать.