반응형
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은 입력 숫자의 크기를 보고 필요한 만큼만 한 번에 할당하면 되기 때문에 훨씬 가볍다.
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
| C++ string 주요 멤버 함수 (0) | 2025.10.01 |
|---|---|
| C++ <iomanip> 포맷 제어 도구 (0) | 2025.10.01 |
| C++ to_string 숫자 -> 문자열 변환 함수 (0) | 2025.10.01 |
| C++ 문자열 -> 숫자 변환 atoi vs stoi vs from_chars (1) | 2025.10.01 |
| C++ 문자열 -> 정수 변환 stoi vs atoi (0) | 2025.09.30 |
댓글