Есть мультимножество,нужно ко всем элементам прибавить чилсло,как это можно сделать,ведь элементы в multiset нельзя изменять.
#include <bits/stdc++.h>
using namespace std;
multiset<int> setplus(multiset<int> S, int num){
multiset<int> result;
for_each(S.begin(), S.end(), [=, &result] (int el) -> void {
result.insert(el + num);
});
return result;
}
int main() {
multiset<int> S;
for(int i = 1;i <= 5;i++) S.insert(i);
S = setplus(S, 1);
for_each(S.begin(), S.end(),[] (int el) -> void {
cout << el << "\n";
});
}
Один из вариантов, просто забить все в новый мультисет.
То же самое, что было в первом ответе, можно выразить более эффективным кодом:
int main()
{
std::multiset<int> S, res;
for (int i = 1; i < 5; ++i)
for(int j = 0; j < 3; ++j)
S.insert(i);
std::transform(S.begin(), S.end(), std::inserter(res, res.end()), [](int i) {return ++i;});
std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей