У меня есть код, который находит новые слова в контейнере и добавляет их к частной переменной класса dict
. Функцию Learner::Learn
необходимо оптимизировать, чтобы она работала быстрее. Элементы в векторе dict
могут повторять друг друга, но 'newWords' всегда должен возвращать количество новых (не повторяющихся) слов.
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
class Learner {
private:
vector<string> dict;
public:
int Learn(const vector<string>& words) {
int newWords = 0;
for (const auto& word : words) {
if (find(dict.begin(), dict.end(), word) == dict.end()) {
++newWords;
dict.push_back(word);
}
}
return newWords;
}
Я пробовал этот способ, но время выполнения то же самое:
class Learner {
private:
vector<string> dict;
public:
int Learn(const vector<string>& words) {
std::size_t index = dict.size();
dict.resize(dict.size() + words.size());
vector<string>::iterator nth = dict.begin() + index;
int newWords = 0;
for (const auto& word : words) {
if (find(dict.begin(), dict.end(), word) == dict.end()) {
++newWords;
*nth++ = word;
}
}
return newWords;
}
Я должен как-то избегать использования метода push_back()
.