首页 > 解决方案 > 如何比较 C++ 中向量的元素?

问题描述

我目前有这个代码:

std::vector<std::string> words { "apple","banana","broccoli","lettuce" };
std::vector<std::string> disliked_words { "broccoli","carrot","tomato","lettuce" };

for (int i = 0; i < words.size(); i++)
    if (words[i] == disliked_words[0] || words[i] == disliked_words[1]  || words[i] == disliked_words[2] || words[i] == disliked_words[3]  )
        words[i] = "BLEEP";
for (int i = 0; i < words.size(); i++)
    std::cout << words[i] << " ";

它比较第二个列表中的元素以查看第一个列表中是否有相似的元素,如果是这种情况,则将单词替换为“BEEP”。但是,if 语句效率非常低,我想知道是否有人知道我可以如何优化它。

抱歉,如果这是一个愚蠢的问题,这是我的第一个问题。

标签: c++

解决方案


使用嵌套循环(在另一个循环中循环)。

std::vector<std::string> words { "apple","banana","broccoli","lettuce" };
std::vector<std::string> disliked_words { "broccoli","carrot","tomato","lettuce" };

    for (unsigned int i = 0; i < words.size(); i++){
      for(unsigned int j=0;j<disliked_words.size();j++){
        if (words[i] == disliked_words[j]){
            words[i] = "BLEEP";
            break;
        }
      }
        std::cout << words[i] << " ";
    }

时间复杂度:O(n^2)。也无需words多次循环遍历向量。


推荐阅读