在使用带有输出迭代器的算法(例如std::set_difference
或std::transform
)时,是否有任何简单的方法来覆盖原始向量?
vector<int> v { 0, 1, 2, 3 };
vector<int> v2{ 1, 3 };
std::set_difference(v.begin(), v.end(), v2.begin(), v2.end(), v.begin());
v = {0,2,2,3}
在这种情况下,我可能可以做类似的事情:
auto it = std::set_difference(v.begin(), v.end(), v2.begin(), v2.end(), v.begin());
v.resize(std::distance(v.begin(), it));
v = {0,2}
但是看起来很麻烦,它不是很易读,并且仅当目标<=要提供尺寸时有效。
有没有一种模块化的方法来解决这个问题?
答案 0 :(得分:0)
set_difference
要求输出范围不能与任何一个输入范围重叠。
您必须将差异构建到新向量中。然后,您可以将结果交换回原始向量。
vector<int> result;
std::set_difference(v.begin(), v.end(), v2.begin(), v2.end(), std::back_inserter(result));
std::swap(v, result);