2017-02-04 7 views
0

Мне интересно просмотреть часть строки. У меня есть пример кода ниже. На самом деле мне интересно посмотреть подстроку строки, например, от индекса от 1 до 5 или от 0 до 7 или около того. У меня есть .substr(), но я хочу избежать копирования. Как мне это сделать.Строковый вид в C++

#include <iostream> 
#include <string> 
#include <experimental/string_view> 

int main() 
{ 
    std::string name; 
    name = "Hello world"; 
    std::experimental::string_view name_v (name); 
    std::cout << "string view, " << name_v << "!\n"; 
} 
+0

Какого копирование на самом деле? Разве это не '' std :: string_view' '? –

+0

Смотрите конструкторы здесь: http://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view – juanchopanza

+0

@ πάνταῥεῖ Я имею в виду, если я использую '.substr()', он создает копию, чтобы этого избежать это 'string_view', где я не могу просмотреть подстроку. Как просмотреть подстроку с помощью 'string_view' на основе индекса. – AwaitedOne

ответ

2

Просто используйте std::experimental::string_view::substr он создает новый string_view без копирования какого-либо из самой строки:

 std::string name = "Hello world"; 

     std::experimental::string_view name_v (name); 

     std::cout << "string view, " << name_v << "!\n"; 

     auto sub_v = name_v.substr(1, 4); // creates a new string_view 

     std::cout << "sub view, " << sub_v << '\n'; 
+0

Спасибо за ваш ответ. Все ли реализации стандартной библиотеки реализуют эту «экспериментальную» функцию – AwaitedOne

+0

@AwaitedOne Пока эта функция больше не «экспериментальная», она была принята в стандарт «C++ 17». Поэтому будущие компиляторы будут ** все ** поддерживать его. – Galik

 Смежные вопросы

  • Нет связанных вопросов^_^