Добавить std::left( container, number) , std::right(container, number)

Raiden LuiKang
Raiden LuiKang

у многих языках и SQL есть удобная функция   left  ,  right  .

 

например, 

 

std::string name = "Hello, world";

std::string hello = left(name, 5); // 'Hello'   , name.substr(0, 5)

std::string world = right(name, 5); // 'world'  ,  name.substr( name.length() - 5, 5);

 

 

4
рейтинг
5 комментариев
Antervis

далеко для всех языков начало/конец строки слева/справа соответственно )

Antervis
asschool
std::string_view::remove_prefix
std::string_view::remove_suffix
asschool
Raiden LuiKang

asschool,

Представте, нужен последный 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.
Raiden LuiKang
Обновлено 
Владимир Топунов

left, right нужно добавить в span и string_view. remove_prefix, remove_suffix - не const и плохо сочетаются с функциональным стилем

Владимир Топунов
Обновлено 
Владимир Топунов
    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 };
    }
Владимир Топунов
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения