几种STL算法具有一般形式:
Algorithm(InputIterator first1, InputIterator last1, OutputIterator result,...)
或
Algorithm(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result,...)
我的问题是 - OutputIterator 结果
何时可以在 (first1,last1)
或 (first2,last2)
范围内?
对于transform
,我在这里找到了答案:http://www.cplusplus.com/reference/algorithm/transform/
但是还有很多其他的可能有意义,例如set_difference
理论上对于这样的用法应该是安全的,并且它也可以在 GCC 4.7.1 的代码中工作。
有引用资料吗?
最佳答案
没有适用于所有算法的通用答案。对于 set_difference
,您可以从 C++11 25.4.5.4/2 中了解到:
要求:结果范围不得与任何一个原始范围重叠。
这似乎使您的代码出现未定义的行为,似乎可以执行您想要的操作。
在决定要使用的迭代器范围之前,您只需查看特定算法的要求。
关于c++ - 就地使用 C++ <algorithm> 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983735/