如何编写比较矢量和聚合的方法?

use*_*020 -4 c++ vector

我有一个矢量.我想将它与聚合物进行比较,看看它们是否相等.例如

vector<int> v{0, 1, 2};

bool b = equal(v, {0, 1, 2}); // how to write a method to implement it???
Run Code Online (Sandbox Code Playgroud)

cws*_*idt 5

只需按==操作员比较它们即可

bool v_equal(const std::vector<int>& v1, const std::vector<int>&v2) {
    return v1==v2;    
}
Run Code Online (Sandbox Code Playgroud)

调用函数如:

bool isEqual = v_equal(v1,{0, 1, 2});
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 5

您可以std::initializer_list将此用于此目的,例如

#include <iostream>
#include <vector>
#include <algorithm>

bool equal(const std::vector<int>& v1, const std::initializer_list<int>& v2) {
  return std::equal(v1.begin(), v1.end(), v2.begin(), v2.end());
}

int main() {
    std::vector<int> data1 = {1,2,3,4};
    std::cout << std::boolalpha << equal(data1, {1,2,3,4}) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用模板模板参数来编写一个泛型函数,只要它们提供迭代器和operator==包含的类型,它就能够计算两个集合,例如:

template<typename T, template<typename...> class C1, typename U, template<typename...> class C2>
bool is_equal(const C1<T>& v1, const C2<U>& v2) {
  return std::equal(v1.begin(), v1.end(), v2.begin(), v2.end());
}
Run Code Online (Sandbox Code Playgroud)

但是为了使演绎工作emphasized textstd::initializer_list需要适当地施放它们,比如说(std::initializer_list<int>){1,2,3,4}.

std::equal接受4个迭代器的重载只是C++ 14,但是如果你无法访问它,你必须检查长度是否相同.