首页 > 解决方案 > 如何查看向量中的所有元素是否相同?

问题描述

我有一个vectorvectors

我将如何检查其中一列中的所有元素是否相同?

我试图用这个嵌套的 for 循环来检查它,但我得到了一个超出范围的错误

void move_bee(vector< vector<insect> > &insects_on_board){
   for(int i = 0; i < 10; i++){
      for(int j = 0; j < insects_on_board.at(i).size(); j++){
         for(int k = insects_on_board.at(i).size(); k > 0; k--){
            if(insects_on_board.at(i).at(j) == "B" &&
               insects_on_board.at(i).at(k) == "B"){
                 insects_on_board.at(i-1).push_back(bee());
                 insects_on_board.at(i).erase(insects_on_board.at(i).begin() + j);
            }
         }
      }
   }
}

我已经阅读了以下内容:

if (equal(myVector.begin() + 1, myVector.end(), myVector.begin()) )

方法,但它不会为我编译,我假设它是因为它vectorvectors.

标签: c++

解决方案


的初始值k结束:使用

for(auto k=v.size(); k--;)

向后循环。

的使用at(i-1)也必须是错误的,因为i从 0 开始。

除非您的向量已排序,否则仅检查两个元素并不能告诉您它们是否相等。

最后,即使你不能使用 range-for(因为索引使用 like i-1and ...+j),也要绑定对你正在处理的元素的引用,至少在外部级别。可读性的改进是显着的。


推荐阅读