8

我有两个向量。我需要从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;
}
4

5 回答 5

23

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

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

std::sort(vector1.begin(), vector1.end());
std::sort(vector2.begin(), vector2.end());

然后你这样称呼它:

std::vector<int> difference;
std::set_difference(
    vector1.begin(), vector1.end(),
    vector2.begin(), vector2.end(),
    std::back_inserter( difference )
);

这将附加到在 中找到但在中找不到difference的那些元素。vector1vector2

于 2013-01-05T20:05:01.087 回答
19

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

第 4 个参数是结果的位置。即使向量的大小不同,它也应该可以工作。

于 2016-11-21T22:58:41.170 回答
2

如果您不想使用std::set_difference,可以这样做:

// substracts b<T> to a<T>
template <typename T>                                                                                            
void
substract_vector(std::vector<T>& a, const std::vector<T>& b)                                                     
{
    typename std::vector<T>::iterator       it = a.begin();
    typename std::vector<T>::const_iterator it2 = b.begin();

    while (it != a.end())
    {
        while (it2 != b.end() && it != a.end())
        {
            if (*it == *it2)
            {
                it = a.erase(it);
                it2 = b.begin();
            }

            else
                ++it2;
        }
        if (it != a.end())
            ++it;

        it2 = b.begin();
    }
}

这将从中的a所有值中删除b

祝你好运

于 2013-01-05T20:31:36.450 回答
1

我建议切换到具有内置向量算术运算的 EigenVectors:

http://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixArithmetic.html

因此,您可以使用 +、-、*、/ 等运算符

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
  Matrix2d a;
  a << 1, 2,
       3, 4;
  MatrixXd b(2,2);
  b << 2, 3,
       1, 4;
  std::cout << "a + b =\n" << a + b << std::endl;
  std::cout << "a - b =\n" << a - b << std::endl;
  std::cout << "Doing a += b;" << std::endl;
  a += b;
  std::cout << "Now a =\n" << a << std::endl;
  Vector3d v(1,2,3);
  Vector3d w(1,0,0);
  std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
}
于 2015-01-20T21:25:05.760 回答
-8

/最简单的方法/

#include<stdio.h>
main()
{
 int A,B,C;
 printf("enter the two numbers 1st 2nd=");
 scanf("%d",&A);
 scanf("%d",&B);
 C=A-B;
 printf("Result=");
 printf
}
于 2018-05-29T12:43:03.597 回答