(C++) 为啥我不能依靠提取运算符来充当迭代器?

Posted

技术标签:

【中文标题】(C++) 为啥我不能依靠提取运算符来充当迭代器?【英文标题】:(C++) Why can't I rely on an extration operator to act as an iterator?(C++) 为什么我不能依靠提取运算符来充当迭代器? 【发布时间】:2020-08-25 05:24:36 【问题描述】:
#include <iostream>
#include <fstream>


int main()

    std::ifstream file("input.txt");
    char currentChar;
    int charCount = 0;

    while (file >> currentChar)
    
        charCount++;
        if (currentChar == 'a')
        
            std::cout << charCount;
        
    

在上面,打印的 charCount 非常大。如果我将 charcount 移动到 if 语句中并将输入转换为字符“a”的重复,它会正确计数(或者会正确计算 a 的数量)。 “file >> currentChar”是什么导致 charCount 数增加如此之高?如果是这样,它在做什么?为什么?

【问题讨论】:

【参考方案1】:

它不是“非常大”。每次遇到a 时,您只是简单地输出当前计数,并且因为您不包含任何空格或换行符,所以每个数字将连接在一起并看起来像一个巨大的数字。

试试这个:

std::cout << charCount << std::endl;

并考虑只在循环之后执行一次。除非出于某种原因您想显示所有中间计数。

【讨论】:

其实你是对的 - 在我在 *** 中重写的代码中,我将 charCount 初始化为零。在我的实际代码中,它没有被初始化。我正在增加一个未初始化的变量,这就是为什么我得到超过 100 万个值的原因,即使输入文件只有几百个字符长并且其中只有一个“a”。我希望打印出它在文件中的位置。我很感激澄清这个数字不应该那么高! 我怀疑可能也是这种情况,但是当代码写在问题中时,我必须给出怀疑的好处。提问时不要重新输入程序,这一点非常重要。您必须复制/粘贴。您可以通过显示实际输出并指示文件中有多少 a 字符来进一步帮助您的问题。这将有助于确定问题,然后很明显您的问题代码与现实不符。

以上是关于(C++) 为啥我不能依靠提取运算符来充当迭代器?的主要内容,如果未能解决你的问题,请参考以下文章

C++:为啥输出迭代器不支持比较操作?

为啥 C++ 字符串迭代器不检查错误?

为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]

在 C++ 中,迭代器,为啥有时我使用它,有时使用 *it?

为啥 C++ 共享指针的行为不像迭代器的标准指针?

为啥在达到容量后在向量中进行插入时,C++ 不处理迭代器?