检查两个向量是否相等

新手上路,请多包涵

如何检查两个向量的前“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;
}

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

原文由 0x0 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 568
1 个回答

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

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

请注意,两个向量中必须至少有 n 元素。如果其中任何一个太短,您的程序的行为将是不确定的。

如果要检查 整个 向量是否相等,只需像比较其他任何内容一样比较它们:

 if (v1 == v2)

您的(失败的)代码正在将一个向量的 迭代器 与另一个向量的 迭代器 进行比较。相等向量的迭代器不相等。每个迭代器都与它正在迭代的序列相关联,因此来自一个向量的迭代器永远不会等于另一个向量的迭代器。

原文由 Rob Kennedy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题