Я реализовал алгоритм по получению нового массива из старого. И мне хотелось бы получить такой же результат но используя функционал библиотеки <algorithm>
. Но я так и не смог найти ничего подходящего, смотрел sort, transform, merge, replace_if и др.
int nums[] = {1, 20, 1, 2, 3, 16};
vector<int> vec(nums, nums+6);
vector<int> newArr;
int n = 0;
for(int i = 0; i < vec.size(); i++)
{
if(vec[i] < vec[i+1])
newArr.push_back(vec[i]);
else
{
vec[i+1] = vec[i] - vec[i+1];
}
}
На выходе получаю [1, 14, 16]
Давно не трогал плюсы. Вот мой вариант.
#include <iostream>
#include <vector>
#include <numeric>
std::vector<int>& Reduce(std::vector<int>& acc, int &value){
if(acc.empty() || acc.back() < value){
acc.push_back(value);
}else{
acc.back() -= value;
}
return acc;
}
int main()
{
std::vector<int> arr {1, 20, 1, 2, 3, 16};
std::vector<int> result = std::accumulate(arr.begin(), arr.end(), std::vector<int>{}, Reduce);
for(auto i: result){
std::cout << i << std::endl;
}
}
Не знаю насколько я правилно понел что вы хотите делать, но насколько понел...
vector<int> v1{2, 5, 3, 7, 16, 5};
vector<int> res(v1.size());
generate(res.begin(), res.end(),
[v1]() { static auto It = v1.begin();
if(It != v1.begin() && *(It -1) > *It)
return *(It - 1) - *It++;
else return *It++; } );
res
будет новой желаемой последовательностью
а если у вас массив на входе, то можно данные брать из прямо массива:
const int N = 6;
int v1[N] = {2, 5, 3, 7, 16, 5};
vector<int> res;
generate_n(back_inserter(res), N,
[v1]() { static const int* It = v1;
if(It != v1 && *(It -1) > *It )
return *(It - 1) - *It++;
else return *It++; } );
Виртуальный выделенный сервер (VDS) становится отличным выбором
Дано бинарное дерево,рандомно было записано данныеДалее необходимо удалить все простые числа
Не могу нагуглить конкретный ответ