检查两个向量是否相等

0x0*_*0x0 46 c++ vector set

如何检查两个向量的第一个"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;
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*edy 131

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

if (std::equal(v1.begin(), v1.begin() + n, v2.begin())
  std::cout << "success" << std::endl;
Run Code Online (Sandbox Code Playgroud)

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

如果你想检查整个矢量是否等于另一个,只需比较它们就像你比较其他任何东西:

if (v1 == v2)
Run Code Online (Sandbox Code Playgroud)

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

  • 我不知道你可以使用`==`比较矢量,我觉得很酷!+1 (24认同)

Ton*_*roy 7

最简单的(就最少的非日常功能来查找)比较两者的方法是再次循环:

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

它会做同样的事情,但如果你愿意,你可以使用<algorithm>标题的std::equal功能:http://www.cplusplus.com/reference/algorithm/equal/