我有一个矢量.我想将它与聚合物进行比较,看看它们是否相等.例如
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)
只需按==操作员比较它们即可
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)
您可以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,但是如果你无法访问它,你必须检查长度是否相同.