检查两个向量是否相等
问题描述:
如何检查两个向量的第一个“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;
注意两个向量必须在他们至少n
元素。如果其中一个太短,你的程序的行为将不确定。
如果你想检查整个矢量是否等于其他的,只是比较他们像你比较别的:
if (v1 == v2)
你的(失败)的代码被比较的迭代一个向量的另一个迭代器。等向量的迭代器不相等。每个迭代器都与它正在迭代的序列相关联,所以一个向量的迭代器永远不会与另一个迭代器的迭代器相等。
答
最简单的(以最少的非日常功能方面查找)的方式来比较两个是循环再次:
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/
我不知道你可以使用'=='比较载体,我猜很酷! +1 – Marlon 2011-03-08 04:26:46
是的,你是对的 – Inverse 2011-03-08 08:03:33