W sumie zależy co chcesz osiągnąć. Na ten moment nie ma to o tyle sensu, że przekazujesz przez wartość wektor, zwracasz inny wektor w przestrzeń i tyle - nie ma jak wyświetlić wyniku, bo nigdzie nie zapisujesz zmian.
Możesz wobec tego zrobić to (zapewne na kilka sposobów) między innymi tak:
(1) przekazujemy referencję do wektora input, zmieniamy jego wartości
void invert(std::vector<int>& values)
{
std::transform(values.begin(),values.end(),values.begin(),std::negate<int>());
}
(2) używamy Twojej wersji. Tworzymy nowy wektor i przypisujemy do niego wektor, który zwracasz
std::vector<int> invert(std::vector<int> values)
{
std::transform(values.begin(),values.end(),values.begin(),std::negate<int>());
return values;
}
.
.
.
.
.
std::vector<int> invInput = invert(input);
Niezależnie od obranej drogi wyświetlamy to w ten sposób, oczywiście zależy od wybranej przez Ciebie wersji.
for (std::vector<int>::const_iterator i = input.begin(); i != input.end(); i++)
{
std::cout << *i << ", ";
}
Cały kod:
#include <iostream>
#include <vector>
#include <algorithm>
// wersja (I)
void invert(std::vector<int>& values)
{
std::transform(values.begin(),values.end(),values.begin(),std::negate<int>());
}
// wersja (II)
std::vector<int> invert(std::vector<int> values)
{
std::transform(values.begin(),values.end(),values.begin(),std::negate<int>());
return values;
}
int main()
{
std::vector<int> input = { 1, 2, 3, 4, 5 };
// w przypadku wersji (II) niezbędne utworzenie nowego wektora i przypisanie
std::vector<int> invInput = invert(input);
// wyświetlanie zawartości wektora, w przypadku wersji nr (II)
// należy zamienić input.begin() na invInput.begin(), drugie analogicznie
for (std::vector<int>::const_iterator i = input.begin(); i != input.end(); i++)
{
std::cout << *i << ", ";
}
std::cout << std::endl;
}