24ResultString
StrCat(
const Strings&... strings) {
25 return [](
auto... string_views) {
26 std::size_t result_size = 0;
27 ((result_size += string_views.size()), ...);
30 result.reserve(result_size);
31 (result.append(string_views), ...);
33 }(std::string_view{strings}...);
41struct HasMappedType<Container, std::void_t<
typename Container::mapped_type>> : std::true_type {};
93 if constexpr (std::is_rvalue_reference_v<
decltype(container)>) {
95 std::make_move_iterator(std::begin(container)), std::make_move_iterator(std::end(container))
98 return ToContainer(std::begin(container), std::end(container));
107struct HasKeyType<Container, std::void_t<
typename Container::key_type>> : std::true_type {};
115auto EraseIf(Container& container, Pred pred) {
116 if constexpr (impl::kHasKeyType<Container>) {
117 auto old_size = container.size();
118 for (
auto it = std::begin(container), last = std::end(container); it != last;) {
120 it = container.erase(it);
125 return old_size - container.size();
127 auto it = std::remove_if(std::begin(container), std::end(container), pred);
128 const auto removed = std::distance(it, std::end(container));
129 container.erase(it, std::end(container));
136size_t
Erase(Container& container,
const T& elem) {
137 if constexpr (impl::kHasKeyType<Container>) {
138 return container.erase(elem);
141 auto it = std::remove(std::begin(container), std::end(container), elem);
142 const auto removed = std::distance(it, std::end(container));
143 container.erase(it, std::end(container));