fork download
  1. #include <iostream>
  2. #include <sstream>
  3.  
  4. size_t size_of_stream(const std::stringstream& ss)
  5. {
  6. std::streambuf* buf = ss.rdbuf();
  7.  
  8. const auto original = buf->pubseekoff( 0, ss.cur, ss.out );
  9. const auto end = buf->pubseekoff( 0, ss.end, ss.out );
  10. buf->pubseekpos( original, ss.out );
  11.  
  12. return (size_t)end;
  13. }
  14.  
  15. int main()
  16. {
  17. std::stringstream ss1;
  18. ss1 << "Hello";
  19. std::cout << size_of_stream(ss1) << " " << ss1.str().size() << std::endl;
  20.  
  21. std::stringstream ss2("World");
  22. std::cout << size_of_stream(ss2) << " " << ss2.str().size() << std::endl;
  23.  
  24. std::stringstream ss3("");
  25. std::cout << size_of_stream(ss3) << " " << ss3.str().size() << std::endl;
  26.  
  27. std::stringstream ss4;
  28. std::cout << size_of_stream(ss4) << " " << ss4.str().size() << std::endl;
  29.  
  30. std::stringstream ss5;
  31. ss5 << "";
  32. std::cout << size_of_stream(ss5) << " " << ss5.str().size() << std::endl;
  33.  
  34. std::stringstream ss6( "hello world" );
  35. std::cout << size_of_stream(ss6) << " " << ss6.str().size() << std::endl;
  36. std::string temp;
  37. ss6 >> temp;
  38. std::cout << size_of_stream(ss6) << " " << ss6.str().size() << std::endl;
  39. }
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
5 5
5 5
0 0
0 0
0 0
11 11
11 11