본문 바로가기
프로그래밍 언어/C++

C++ ostringstream string 버퍼를 이용한 출력

by Jo_Wick 2025. 10. 1.
반응형

ostringstream란?

  • 헤더: <sstream>
  • 풀네임: output string stream
  • std::ostream(출력 스트림) 계열인데, 출력 방향이 콘솔(cout)이 아니라 std::string 버퍼라는 점이 특징이다.
  • 즉, cout처럼 << 연산자를 이용해서 데이터를 흘려보내면, 그 결과를 문자열로 얻을 수 있음

 

예제

#include <iostream>
#include <sstream>
#include <iomanip>  // setprecision
using namespace std;

int main() {
    double pi = 3.14159;

    ostringstream oss;               // 문자열 출력 스트림 생성
    oss << fixed << setprecision(2); // 소수점 2자리 고정
    oss << "pi = " << pi;            // 스트림에 쓰기

    string s = oss.str();            // 최종 문자열 추출
    cout << s << endl;               // "pi = 3.14"
}

 

주의사항

to_string과 함께 소수를 변환할때 비교해서 쓸 수 있는데 to_string과 비교하면 당연히 ostringstream을 이용하면 성능적으로는 훨씬 떨어진다.

ostringstream은 내부적으로 버퍼 -> stream -> 조정자(iomanip) 이렇게 여러 계층을 거치게 된다. 게다가 iomanip의 여러 포맷 옵션까지 반영할 수 있어야 해서 더 무거울 수 밖에 없다.

그에 비해 to_string은 단순히 "소수점 6자리"라는 고정 규칙만 따라가면 되기 때문이다.

 

메모리 측면에서도 ostringstream은 내부에서 stringbuf라는 버퍼를 관리를 한다. 이 버퍼가 커질때마다 동적 할당이 일어날 수 있고, 이게 성능에 추가 비용이 된다.

하지만 to_string은 입력 숫자의 크기를 보고 필요한 만큼만 한 번에 할당하면 되기 때문에 훨씬 가볍다.

반응형

댓글