循环设计:计数和后续代码复制

Loop Design: Counting & Subsequent Code Duplication

本文关键字:代码 复制 循环      更新时间:2023-10-16

Accelerated C++中的练习3-3让我想到了关于循环设计的两个更广泛的问题。该练习的挑战是将任意数量的单词读入向量,然后输出给定单词在该输入中出现的次数。我在下面包含了我的相关代码:

string currentWord = words[0];
words_sz currentWordCount = 1;
// invariant: we have counted i of the current words in the vector
for (words_sz i = 1; i < size; ++i) {
    if (currentWord != words[i]) {
        cout << currentWord << ": " << currentWordCount << endl;
        currentWord = words[i];
        currentWordCount = 0;
    }
    ++currentWordCount;
}
cout << currentWord << ": " << currentWordCount << endl;

请注意,输出代码必须在循环外再次出现才能处理最后一个字。我意识到,如果我担心重复代码的复杂性,我可以将它移到一个函数中,只需调用函数两次。

问题1:这种变通方法常见吗?有没有一种典型的方法来重构循环以避免这种重复?

问题2:虽然我的解决方案很简单,但我习惯于从零开始计数。有没有一种更可接受的方式来编写关于这一点的循环?还是这是最佳实施?

为什么不能使用地图http://www.cplusplus.com/reference/stl/map/单词作为关键字,值作为计数?