【发布时间】:2014-03-07 06:13:35
【问题描述】:
我尝试使用以下代码概括流对象:
#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, ""));
}
现在它适用于cout << things 和string str = oss.str(); copy(str.begin() ...,但不适用于oss.str().begin()。据我了解,str() 返回一个 string 对象,其中包含流当前内容的副本。那么为什么我们需要复制它两次,一次从str() 复制一次,一次在字符串对象的初始化中呢?这个问题与使用c_str()不同。
以下也有效:
string::iterator begin = oss.str().begin();
string::iterator end = oss.str().end();
copy(begin, end, ostream_iterator<char>(cout, ""));
【问题讨论】:
标签: c++ string stl stringstream