如何检查两个向量的第一个“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;
}
为什么打印“失败”而不是“成功”?
答案 0 :(得分:129)
使用<algorithm>
标题中的std::equal
功能:
if (std::equal(v1.begin(), v1.begin() + n, v2.begin())
std::cout << "success" << std::endl;
请注意,两个向量必须至少包含n
个元素。如果任何一个太短,程序的行为将是不确定的。
如果你想检查整个向量是否等于另一个,只需比较它们就像你比较其他任何东西一样:
if (v1 == v2)
您的(失败的)代码将一个向量的迭代器与另一个向量的迭代器进行比较。等向量的迭代器不相等。每个迭代器都与它迭代的序列相关联,因此一个向量的迭代器永远不会等于另一个向量的迭代器。
答案 1 :(得分:7)
最容易(就最少的非日常功能而言)比较两者的方法是再次循环:
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/