C++ 如何编写比较向量和聚合的方法?

C++ 如何编写比较向量和聚合的方法?,c++,vector,C++,Vector,我有一个向量。我想把它和一个总数进行比较,看看它们是否相等。比如说 vector<int> v{0, 1, 2}; bool b = equal(v, {0, 1, 2}); // how to write a method to implement it??? 向量v{0,1,2}; 布尔b=相等(v,{0,1,2});//如何编写一个方法来实现它??? 只需通过=操作符比较它们 bool v_equal(const std::vector<int>& v1

我有一个向量。我想把它和一个总数进行比较,看看它们是否相等。比如说

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

bool b = equal(v, {0, 1, 2}); // how to write a method to implement it???
向量v{0,1,2}; 布尔b=相等(v,{0,1,2});//如何编写一个方法来实现它???
只需通过
=
操作符比较它们

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

为此,您可以使用
std::initializer\u 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;
}
但是要使演绎与强调文本std::initializer\u list一起工作,您需要适当地转换它们,就像
(std::initializer\u list){1,2,3,4}


只接受4个迭代器的
std::equal
重载是C++14,但如果您没有访问权限,则必须检查其长度是否相同。

{0,1,2}
不是聚合,而是大括号括起来的列表。我想你的意思是要检查向量是否与从该列表初始化的向量相同。@user4581301
std::equal
需要3个迭代器,因此它不能与任何与OP的pseudocodeYeah非常相似的语法一起使用。把我带到那里。
向量v{0,1,2};布尔b=(v==向量{0,1,2})你知道这是可能的吗?你还需要检查长度是否相同-如果初始值设定项列表比向量长,但从相同的元素开始,这将报告
true
;如果列表较短,则会导致未定义的行为。
#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;
}
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());
}