Open apolukhin opened 3 years ago
Antervis, 26 апреля 2019, 16:04 далеко для всех языков начало/конец строки слева/справа соответственно )
Айдар Фаттахов, 14 мая 2019, 14:47
std::string_view::remove_prefix
std::string_view::remove_suffix
Удалённый пользователь, 22 мая 2019, 09:04 Представте, нужен последный 9 символ строка. Сейчас пишем.
//Current implementation. 'phone' variable used 5 times(!!)
std::string phone = read_from_outside();
if (phone.length() > 9 ) {
phone = phone.substr( phone.length() - 9 ) ;
}
//with left, right, 'phone' variable used single, ready to use.
std::string phone = right( read_from_outside(), 9 ) ; // right no more 9 symbols.
Владимир Топунов, 19 июля 2019, 19:26 left, right нужно добавить в span и string_view. remove_prefix, remove_suffix - не const и плохо сочетаются с функциональным стилем
Владимир Топунов, 19 июля 2019, 21:25
constexpr span left(size_t size) const noexcept
{
return { span_data, size };
}
constexpr span right(size_t size) const noexcept
{
return { span_data + span_size - size, size };
}
std::ranges уже отчасти позволяют это делать https://gcc.godbolt.org/z/4xKW9fP11
Где-то в районе C++23 добавят std::ranges::take_last http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2214r0.html и std::ranges::to. Тогда запись будет совсем короткой:
#include <string>
#include <iostream>
#include <ranges>
int main() {
std::string name = "Hello, world";
auto hello = name | std::views::take(5) | to<std::string_view>;
auto world = name | std::views::take_last(5) | to<std::string_view>;
std::cout << hello;
std::cout << '\n';
std::cout << world;
}
std::ranges::to добавили в C++23, std::views::take_last не успел в C++23
Перенос предложения: голоса +8, -1 Автор идеи: ??
у многих языках и SQL есть удобная функция left , right .
например,