代码之家  ›  专栏  ›  技术社区  ›  Kostas

使用源向量作为目标

  •  -1
  • Kostas  · 技术社区  · 6 年前

    当使用带有输出迭代器的算法时,例如 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}

    但这看起来很麻烦,可读性不强,而且 仅当目标<=到源的大小 .

    有没有一种模块化的方式来实现这一点?

    1 回复  |  直到 6 年前
        1
  •  0
  •   1201ProgramAlarm    6 年前

    set_difference 要求输出范围不与任何一个输入范围重叠。

    你必须将差分构建成一个新的向量。然后可以将结果交换回原始向量。

    vector<int> result;
    std::set_difference(v.begin(), v.end(), v2.begin(), v2.end(), std::back_inserter(result));
    std::swap(v, result);