8

私は2つのベクトルを持っています。そして、vector2 にあるものを vector1 から削除する必要があります。

[編集:これが以下のリンクによる要素ごとの減算を意味するのか、差を設定するのかは明らかではありません]

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_difference: http://en.cppreference.com/w/cpp/algorithm/set_difference

ソートされた範囲で動作するため、最初に が必要になりsortます。つまり、すでにソートされていない限り(ユースケースのように)。vectorsset_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 に答える