나는 다음 코드를 사용하여 스트림 개체에 대한 일반화하려고 : stringstream str 함수의 문제점은 무엇입니까?
#include <iostream>
#include <vector>
#include <sstream>
#include <iterator>
using namespace std;
template<class T, class U>
T& operator<<(T& os, vector<U> vec)
{
vector<string>::iterator begin = vec.begin();
vector<string>::iterator end = vec.end();
for (; begin != end; ++begin)
os << *begin << " ";
return os;
}
int main()
{
vector<string> things({
"car", "truck", "rabbit"
});
ostringstream oss;
oss << things << endl;
copy(oss.str().begin(), oss.str().end(), ostream_iterator<char>(cout, ""));
}
가 지금은
oss.str().begin()
와
cout << things
및
string str = oss.str(); copy(str.begin() ...
하지만 작동합니다. 내가 이해 한대로
str()
은
문자열 객체와 스트림의 현재 내용 인을 반환합니다. 그렇다면 왜 우리는 두 번 복사해야합니까? 한 번
str()
에서 한 번 문자열 개체의 초기화에서? 이 질문은
c_str()
을 사용하는 것과 같지 않습니다.
다음은 또한 작동합니다
내가 이해에서string::iterator begin = oss.str().begin();
string::iterator end = oss.str().end();
copy(begin, end, ostream_iterator<char>(cout, ""));