像std::transform
或std::partial_sum
这样的'流媒体'算法可以读取和写入同一个地方吗?
例如,以下代码在gcc中有效,但我不确定它是否“只是意外”,编译器可以自由地破解代码以优化它。
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
int main()
{
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<int> vec(arr, arr + sizeof(arr)/sizeof(arr[0]));
std::partial_sum(vec.begin(), vec.end(), vec.begin());
for(std::vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++)
std::cout << *iter << std::endl;
return 0;
}
答案 0 :(得分:3)
是的,绝对,只要迭代器首先允许读/写(例如,你显然无法从std::cout
读取)。一种常见的模式是使用transform
来就地修改矢量。
答案 1 :(得分:1)
是的,这样可以正常工作。您将覆盖相同数量的答案元素的来源。
例如,
int square(int x) { return x*x; }
std::transform(vec.begin(), vec.end(), vec.begin(), square);
将vec中的每个数字对齐。