26ResultString
StrCat(
const Strings&... strings) {
27 return [](
auto... string_views) {
28 std::size_t result_size = 0;
29 ((result_size += string_views.size()), ...);
32 result.reserve(result_size);
33 (result.append(string_views), ...);
35 }(std::string_view{strings}...);
91 if constexpr (std::is_rvalue_reference_v<
decltype(container)>) {
93 std::make_move_iterator(std::begin(container)),
94 std::make_move_iterator(std::end(container))
97 return ToContainer(std::begin(container), std::end(container));
122auto EraseIf(Container& container, Pred pred) {
123 if constexpr (impl::HasKeyType<Container>) {
124 auto old_size = container.size();
125 for (
auto it = std::begin(container), last = std::end(container); it != last;) {
127 it = container.erase(it);
132 return old_size - container.size();
134 auto it = std::remove_if(std::begin(container), std::end(container), pred);
135 const auto removed = std::distance(it, std::end(container));
136 container.erase(it, std::end(container));
143size_t
Erase(Container& container,
const T& elem) {
144 if constexpr (impl::HasKeyType<Container>) {
145 return container.erase(elem);
148 auto it = std::remove(std::begin(container), std::end(container), elem);
149 const auto removed = std::distance(it, std::end(container));
150 container.erase(it, std::end(container));