【发布时间】:2012-08-07 04:28:09
【问题描述】:
我想有人不得不问这些问题,所以请多多包涵。
让我们考虑以下野兽:
- ostream
- istream
- iostream
- 流缓冲
-
string- 按照本杰明的观察,这个不属于这里。 - 字符串缓冲区
以及以下迭代器:
- ostream_iterator
- ostreambuf_iterator
- istream_iterator
- istreambuf_iterator
问题:
为什么没有iostream_iterator、streambuf_iterator、(std::string::iterator 和 std::string::const_iterator 确实存在)或string_iteratorstringbuf_iterator ?
为什么上面列出的 4 个迭代器没有像 std::vector<T>::const_iterator 这样的 const 版本?
如果这些野兽不提供 begin() 和 end() 方法,我们应该如何迭代它们?以上4个迭代器的目的是什么?
N00b 问题:我在哪里可以找到详细说明这些类背后的逻辑以及如何使用它们的一些不错的示例的好参考?
希望有经验的人能为上述问题提供一个很好的答案。
PS:现实生活中的情况:
void writeToStream(std::ostream &out);
int main ()
{
std::ostringstream byteStream;
writeToStream(byteStream);
std::string byteString = byteStream.str();
for (unsigned short i = 0; i < byteString.size(); ++i)
{
//do something with each byteString[i]
}
return 0;
}
我的猜测是,我可以使用 ostream 并通过使用类似于 std::vector 的迭代器来迭代其元素,而不是使用 ostringstream 和 str() 方法将其转换为 string ,但我找不到任何有关此的信息。
【问题讨论】:
-
请记住,流是流,而不是容器(这意味着在大多数情况下,您无法返回和/或会破坏您读取的数据)
-
@PasmaHH:好的,这是一个很好的观点。谢谢! :) 不过,我仍然希望对这些问题进行详细解释。
-
你为什么把
string分组在里面?有string::iterator、string::const_iterator、string::begin()、string::end()。 -
@BenjaminLindley Oups...我的错。你是对的。
标签: c++ stl stream iterator buffer