使用源向量作为目标

时间:2018-10-27 19:17:20

标签: c++ std

在使用带有输出迭代器的算法(例如std::set_differencestd::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}

但是看起来很麻烦,它不是很易读,并且仅当目标<=要提供尺寸时有效。

有没有一种模块化的方法来解决这个问题?

1 个答案:

答案 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);