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