2015-02-19 11 views
10

Czy istnieje jakakolwiek zaimplementowana metoda w bibliotece C++, która pozwala na sumowanie wartości dwóch wektorów (tego samego rozmiaru i typu kursu)?
Na przykład:Sumy wartości 2 wektorów

std::vector<int> a;//looks like this: 2,0,1,5,0 
std::vector<int> b;//looks like this: 0,0,1,3,5 

Teraz następnie dodanie ich wartości razem powinna wyglądać następująco:

//2,0,2,8,5 

Odpowiedź Spodziewam jest albo „Nie, nie ma” lub „tak” + metoda.

+3

Istnieje przeciążenie ['std :: transform'] (http://pl.cppreference.com/w/cpp/algorithm/transform), które działa na parach elementów z dwóch zakresów. – juanchopanza

+3

btw, zauważyłem, że niektórzy ludzie uważali za słuszne odrzucenie tego pytania. Jakiś konkretny powód? Jestem przynajmniej pewien, że przestrzegałem wszystkich zasad dotyczących właściwego zadawania pytania: | – MrGuy

Odpowiedz

24

Można użyć std::transform i std::plus<int>()

std::vector<int> a;//looks like this: 2,0,1,5,0 
std::vector<int> b;//looks like this: 0,0,1,3,5 

// std::plus adds together its two arguments: 
std::transform (a.begin(), a.end(), b.begin(), a.begin(), std::plus<int>()); 
// a = 2,0,2,8,5 

Ta forma std::transform trwa 5 argumenty:

  • Dwa pierwsze są wprowadzane iteratory do początkowych i końcowych pozycjach pierwszej kolejności.
  • Trzeci to iterator wejściowy do początkowej pozycji drugiego zakresu.
  • Czwarty to wyjściowy iterator początkowej pozycji zakresu, w którym zapisywane są wyniki operacji.
  • Ostatni argument jest funkcją binarną, która przyjmuje dwa elementy jako argument (po jednym z każdej z dwóch sekwencji) i zwraca pewną wartość wyniku, która może być przekształcana na typ wskazany przez OutputIterator.
+0

Pozdrawiam, właśnie tego szukałem :) Przyjmę to jako odpowiedź tak szybko jak to możliwe: p – MrGuy

+1

Poprawiłem argumenty. Dwa pierwsze są wejściowymi iteratorami do początkowych i końcowych pozycji pierwszej sekwencji. Trzeci to początkowa pozycja drugiego zakresu. Czwarty to początkowa pozycja zakresu, w którym zapisywane są wyniki operacji. Ostatni wykonano operację. –

+1

Ok, facet Python tutaj, więc proszę o mnie proszę .. Nie można dodać wektora (o tej samej długości) znakiem '+'? Czy musiałbym przeciążać operatora? – quapka

Powiązane problemy