Pull to refresh

Comments 6

Добрый день! По поводу примера 1 из раздела 5  - как то у Вас сложно получилось 😊. Вот так проще будет😊:

std::string convert1(const char buffer[15])
{
	std::array   positions{ 3, 5, 7, 9 };
	std::string  result{ buffer };
	for (auto pos : positions)
		result[pos] = '-';
	return result;
}

А по поводу: «Для данного примера нет алгоритмов, которые смогли бы решить данную задачу» - ну почему же, вполне можно😊:

std::string convert2(const char buffer[15])
{
	std::unordered_set  positions{ 3, 5, 7, 9 };
	std::string         result{ buffer };
	std::replace_if(result.begin(),
		            result.end(), 
		            [=, i = 0](auto elem) mutable {return positions.contains(i++);},
		            '-');
	return result;
}

Ну и соответственно для рэнжей решение можно написать гораздо проще😊:

std::string convert3(const char buffer[15])
{
	std::unordered_set  positions{ 3, 5, 7, 9 };
	std::string         result{ buffer };
	std::ranges::replace_if(result,
		                    [=, i = 0](auto elem) mutable {return positions.contains(i++); },
		                    '-');
	return result;
}

для рэнжей решение можно написать гораздо проще

Прямо гораздо?

Ну если учесть то что все три реализации делают вовсе не то что пример 1 из раздела 5 то проще было написать std::cout << "Hello World!"; :)

Простите, но вы решили другую задачу: вы заменили символы на позициях. А нужно было вставить.

"x=" + std::to_string(it.x) + " y=" + std::to_string(it.y);

std::format, не?

std::ranges::views::transform([](auto item) {return convert(item); })

зачем convert оборачивать в лямбду?

Ну и отдельный привет рэнжам - то есть view алгоритмы вас устраивают, а рэнжи нет? Их же в первую очередь придумали чтобы не писать begin-end и превращать все вот эти ваши

std::transform(temp.cbegin(), temp.cend(), std::back_inserter(str), [](auto item) { return convert(item); });

во что-то вроде

std::ranges::transform(temp, std::back_inserter(str), convert);

нельзя распараллелить вычисления;

используйте std::execution_policy::par и будет вам счастье. Упрощение оптимизаций для компилятора - вторая из мажорных причин существования рэнжовых алгоритмов.

Спасибо, что поделились! Никто не запрещает использовать любые удобные для вас методы. Автор рассказал о своем личном опыте, который может кому-то помочь и упростить его код.

Sign up to leave a comment.