vector<int> a;
sort(a.begin(), a.end());
copy(a.begin(), a.end(), ostream_iterator<int>(cout, " "));
Допустим, если в векторе числа лежат числа 10 5 2
, то сортировка выдаст мне 2 5 10
. Как сделать так, чтобы он мне вывел 3 6 11
без изменения самих чисел в векторе? Если в цикле через i+1
то тут как?
Для этого нужен свой итератор или диапазон. Можно использовать rangev3:
std::array<int, 3> array = {1, 5, 4};
ranges::sort(array);
auto range_view = ranges::view::transform(array, [](int i){return i + 1;});
std::copy(range_view.begin(), range_view.end(), std::ostream_iterator<int>(std::cout, " "));
достаточно после сортировки добавить одну строку
transform(a.begin(), a.end(), a.begin(), [](int i) {return ++i;});
но если вы не хотите менять данные в векторе, то можно впихать в другую последовательность
vector<int> v(3);
transform(a.begin(), a.end(), v.begin(), [](int i) {return ++i;});
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
еще один вариант
struct incr {
std::vector<int> v;
incr(const std::vector<int>& res) : v(res) {}
int operator ()() {
static auto I = v.begin();
*I += 1;
return *I++;
}
};
int main()
{
std::vector<int> a{2, 5, 7};
std::sort(a.begin(), a.end());
std::generate_n(ostream_iterator<int>(cout, " "), 3, incr(a));
return 0;
}
и так можно придумать много вариантов
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сделать подсчет очков по удаляемым линиям? Допустим убралась линия - плюс 40 очковПишу в Visual Studio 2017
Я хочу отловить момент, когда приложение пытаются закрыть и убить процесс своей же программы через taskkillСделать я это хочу, потому что при...
Есть 2 действительных числа, x и y, которые вводятся с клавиатурыНужно проверить попадет ли точка в заданную область, область это рисунок