C++流迭代器与容器迭代器
C++ stream iterators vs container iterators
据我所知,C++,对于容器类型(例如 vector
,deque
,map
(,我可以使用类似语法获取迭代器类型
vector<int>::iterator
map<int,int>::const_iterator
并通过类似这样的方法获取第一个元素的实际迭代器
stuff.begin()
但是,对于流(例如 ifstream
(,界面似乎有点不同;我可以通过编写来获得迭代器
streambuf_iterator<char>(fin)
stream_iterator<int>(fin)
据我了解,ifstream
没有任何方法begin<int>
或beginbuf
我最初从vector
经验中期望的方式。
它们不同(技术或历史(有什么原因吗?如果迭代器的行为更像vector
及其同类,对于新编码人员来说istream
不是更正交和更容易吗?
我认为这里要注意的重要区别是您尝试使用迭代器的结构的差异。你提到的结构,vector
、deque
和map
,是灵活的,但它们所包含数据的状态是相对静态的。另一方面,stream
是极其流动和不断变化的,如果我们把它看作是一个stream
应该如此。
现在,由于流"流动"并继续变化,因此在将流作为数据对象观察时,流没有begin
或end
。显然,这种观点不是绝对的,但我相信这将是设计迭代器时遵循stream
理念。
事实上,流不是向量。你可以想象一条河。河流没有"开始"的水,也没有"结束"的水(除非它干涸了(。向量更像是一排相同的对象。该行有开始和结束。
文件当然有开始和结束,但这不是流想要抽象文件的方式。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 如何在C++中将迭代器作为函数参数传递
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?