Цикл Дизайн: подсчет и последующее дублирование кода - PullRequest
0 голосов
/ 22 марта 2012

Упражнение 3-3 в Accelerated C ++ привело меня к двум более широким вопросам о дизайне петель.Задача упражнения - прочитать произвольное количество слов в векторе, а затем вывести количество раз, которое данное слово появляется в этом входном файле.Я включил свой соответствующий код ниже:

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: Хотя мое решение является простым, я привык считать от нуля.Есть ли более приемлемый способ написать цикл, соблюдая это?Или это оптимальная реализация?

1 Ответ

0 голосов
/ 22 марта 2012

Почему вы не можете использовать карту http://www.cplusplus.com/reference/stl/map/ со словом в качестве ключа и значением в качестве счетчика?

...