Advertisement
RobertDeMilo

RB4.11 Безопасное использование string view

Jun 9th, 2024
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. vector<string_view> SplitIntoWords(const string& s)
  2. {
  3.     string_view str = s;
  4.     vector<string_view> result;
  5.    
  6.     size_t pos = 0;
  7.     const size_t pos_end = str.npos;
  8.  
  9.     while (true)
  10.     {
  11.         size_t space = str.find(' ', pos);
  12.         result.push_back(space == pos_end ? str.substr(pos) : str.substr(pos, space - pos));
  13.  
  14.         if (space == pos_end)
  15.         {
  16.             break;
  17.         }
  18.         else
  19.         {
  20.             pos = space + 1;
  21.         }
  22.     }
  23.     return result;
  24. }
  25.  
  26. // создадим очень длинную строку,
  27. // состоящую из слов из ста 'a'
  28. string GenerateText() {
  29.     const int SIZE = 10000000;
  30.     string text(SIZE, 'a');
  31.     for (int i = 100; i < SIZE; i += 100) {
  32.         text[i] = ' ';
  33.     }
  34.     return text;
  35. }
  36.  
  37. int main() {
  38.     const string text = GenerateText();
  39.     {
  40.         LOG_DURATION("string");
  41.         const auto words = SplitIntoWords(text);
  42.         // выведем первое слово
  43.         cout << words[0] << "\n";
  44.     }
  45.     {
  46.         LOG_DURATION("string_view");
  47.         const auto words = SplitIntoWordsView(text);
  48.         // выведем первое слово
  49.         cout << words[0] << "\n";
  50.     }
  51.  
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement