gpt4 book ai didi

c++ - 从字符串流增加字数

转载 作者:太空宇宙 更新时间:2023-11-04 14:55:03 25 4
gpt4 key购买 nike

我还在学习 C++,我想出了一个很难理解的表达式。

基本上它将 cin 输入到一个 istringstream,然后对其进行处理以将单个单词及其计数(出现的次数)保存在映射容器“单词”中

代码

std::map<string, int> words;

std::istream_iterator<string> begin(cin);
std::istream_iterator<string> end;

while(begin != end )
words[*begin++]++;

如果有人可以为我解释一下 while 循环的代码?我知道最终结果,只是想知道它到底是怎么做到的。谢谢!

最佳答案

关于 std::istream_iterator<T> : 这种类型提供了一个迭代器接口(interface)来流式 I/O。在这里,beginend是迭代器(您可以认为它们是 string 的“虚拟”容器中的迭代器,在 cin 的输入中表示)。

因为 begincin 初始化,它将成为我所说的“事件”迭代器:它将从 cin 中读取第一次取消引用(如 *begin ),以及第一次在每次前增量或后增量后取消引用( begin++ )。

因为 end没有用任何东西初始化,它变成了一个特殊的“结束标记”迭代器,而不是一个事件迭代器。这个特殊迭代器值的唯一目的是成为事件迭代器到达文件末尾后可以比较的值。

就这样,读了一系列T (在这种情况下,string)可以从文件中硬塞进容器的普通迭代器遍历中:)

[编辑:澄清 operator[]() 的行为.]

关于 std::map<string, int> : 您可以将映射视为一种非常通用的数组类型,除了小整数之外,它还可以通过其他事物进行索引——在本例中为字符串。 std::map<K, T>类型重载 operator[]()返回对由 key 参数标识的现有元素的引用,具有附加的(通常有用,因为它在这里)功能,如果 map 中不存在具有该键的元素,它将添加一个默认值(0 int ) 并且将返回对此全新元素的引用。

关于c++ - 从字符串流增加字数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com