25ResultString
StrCat(
const Strings&... strings) {
26 return [](
auto... string_views) {
27 std::size_t result_size = 0;
28 ((result_size += string_views.size()), ...);
31 result.reserve(result_size);
32 (result.append(string_views), ...);
34 }(std::string_view{strings}...);
90 if constexpr (std::is_rvalue_reference_v<
decltype(container)>) {
92 std::make_move_iterator(std::begin(container)),
93 std::make_move_iterator(std::end(container))
96 return ToContainer(std::begin(container), std::end(container));
109auto EraseIf(Container& container, Pred pred) {
110 if constexpr (impl::HasKeyType<Container>) {
111 auto old_size = container.size();
112 for (
auto it = std::begin(container), last = std::end(container); it != last;) {
114 it = container.erase(it);
119 return old_size - container.size();
121 auto it = std::remove_if(std::begin(container), std::end(container), pred);
122 const auto removed = std::distance(it, std::end(container));
123 container.erase(it, std::end(container));
130size_t
Erase(Container& container,
const T& elem) {
131 if constexpr (impl::HasKeyType<Container>) {
132 return container.erase(elem);
135 auto it = std::remove(std::begin(container), std::end(container), elem);
136 const auto removed = std::distance(it, std::end(container));
137 container.erase(it, std::end(container));