C++:减去向量

Kif*_*sif 8 c++

我有两个向量.我需要从vector1中删除vector2中的内容.我使用Visual Studio 2010.

似乎有一种方法:http: //msdn.microsoft.com/en-us/library/system.windows.vector.subtract.aspx

但它不知何故不起作用,甚至没有代码示例.

你可以帮帮我吗?如果不存在标准方法,也许您可​​以建议如何通过循环组织它?先感谢您.

#include "stdafx.h";
#include <vector>;
#include <iostream>

using namespace std;

int main ()
{
  vector<int> vector1;
  vector<int> vector2;

  for (int i = 0; i < 10; i++)
  {
vector1.push_back (i);
  }

  for (int i = 0; i < 6; i++)
  {
    vector2.push_back (i);
  }

  myvector1 = Subtract(vector1, vector2); 

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

K-b*_*llo 21

您应该使用std::set_difference:http://en.cppreference.com/w/cpp/algorithm/set_difference

首先,您将需要sort您的vectors,因为set_difference排序范围上操作.也就是说,除非它们已经排序(如在您的用例中).

std::sort(vector1.begin(), vector1.end());
std::sort(vector2.begin(), vector2.end());
Run Code Online (Sandbox Code Playgroud)

然后你这样称呼它:

std::vector<int> difference;
std::set_difference(
    vector1.begin(), vector1.end(),
    vector2.begin(), vector2.end(),
    std::back_inserter( difference )
);
Run Code Online (Sandbox Code Playgroud)

这将附加到difference找不到的那些元素vector1vector2.


Iva*_*nko 8

std::transform(vector1.begin(), vector1.end(), vector2.begin(), vector1.begin(), std::minus<int>())

第四个参数是结果的位置.即使向量的大小不同,它也应该起作用.

  • 只是为了向正在快速浏览的人澄清一下:这只是对每个元素进行减法,而不是设置差异。 (6认同)