Home > Net >  Without copying, how do I print part of a std::string in C ?
Without copying, how do I print part of a std::string in C ?

Time:12-10

Assume that I want to print the first word. The most obvious way would be like this:

string line = "Hello Hello";
const auto space_iter = find(line.cbegin(), line.cend(), ' ');
cout<<string(line.cbegin(), space_iter)<<endl;

But I'm printing profiling logs for my game at over 60fps, so such memory allocation and copying matters.

I also tried std::span:

string line = "Hello Hello";
const auto space_iter = find(line.cbegin(), line.cend(), ' ');
cout<<span(line.cbegin(), space_iter)<<endl;

But it seems that std::cout can't print a std::span, and gcc gives me 500 lines of errors.

CodePudding user response:

C 20 gives std::string_view a convenient constructor that takes contiguous iterators. Like those of std::string. Pre-C 20, getting a substring as a string_view was a bit more complex, but now it's pretty trivial:

cout << std::string_view(line.cbegin(), space_iter) << endl;
  • Related