检查两个向量是否相等

如何检查两个向量的第一个“n”元素是否相等?

我尝试了以下内容:

#include <iostream> #include <vector> #include <iterator> using namespace std; typedef vector<double> v_t; int main(){ v_t v1,v2; int n = 9; for (int i = 1; i<10; i++){ v1.push_back(i); v2.push_back(i); } v1.push_back(11); v2.push_back(12); if (v1.begin()+n == v2.begin()+n) cout << "success" << endl; else cout << "failure" << endl; } 

为什么打印“失败”而不是“成功”?

使用<algorithm>标题中的std::equal函数:

 if (std::equal(v1.begin(), v1.begin() + n, v2.begin()) std::cout << "success" << std::endl; 

请注意,两个vector都必须至less有n元素。 如果任一个太短,你的程序的行为将是不确定的。

如果你想检查整个vector是否与其他vector相同,只需比较它们,就像比较其他任何东西一样:

 if (v1 == v2) 

你的(失败的)代码是将一个向量的迭代 与另一个向量的迭代器进行比较。 等向量的迭代器不相等。 每个迭代器都与它迭代的序列绑定,所以一个向量的迭代器永远不会和另一个迭代器的迭代器相等。

最简单的(以最less的非日常function来查找)比较两者的方法是再次循环:

 bool are_equal = true; for (int i = 0; i < first_how_many; i++) if (v1[i] != v2[i]) { are_equal = false; break; } 

它会做同样的事情,但是如果你喜欢,你可以使用<algorithm>头的std::equal函数: http : //www.cplusplus.com/reference/algorithm/equal/