C++ 这个使用boost::mismatch的示例意味着什么?
我试图理解下面给出的示例:C++ 这个使用boost::mismatch的示例意味着什么?,c++,templates,boost,syntax,mismatch,C++,Templates,Boost,Syntax,Mismatch,我试图理解下面给出的示例: 模板 std::pair< 类型名称范围\迭代器::类型, 类型名称范围\迭代器::类型 > 不匹配(SinglePassRange1和rng1,常数SinglePassRange2和rng2); 以下是描述: 不匹配查找对应元素所在的第一个位置 从两个范围来看,rng1和rng2不相等 在上述示例中,我不清楚的主要问题是:什么是输入,什么是失配函数的输出? rng1和rng2分别是类SinglePassRange1和SinglePassRange2的对象。但这些课
模板
std::pair<
类型名称范围\迭代器::类型,
类型名称范围\迭代器::类型
>
不匹配(SinglePassRange1和rng1,常数SinglePassRange2和rng2);
以下是描述:
不匹配查找对应元素所在的第一个位置
从两个范围来看,rng1和rng2不相等
在上述示例中,我不清楚的主要问题是:什么是输入,什么是失配函数的输出?
rng1
和rng2
分别是类SinglePassRange1
和SinglePassRange2
的对象。但这些课程是什么?它们的定义是什么?它们应该是“范围”,但什么是“范围”
我也不清楚调用mismatch
函数之前的所有这些行是做什么的。第一行看起来像是要定义一个类模板,但我们以后不会这样做
我也不清楚,在调用
不匹配函数可以执行。第一行看起来我们要
定义一个类模板,但我们以后不会这么做
这不是一个例子。它是一个函数模板的声明,它是boost范围库的一部分
在上面的例子中,我不清楚的主要问题是:什么
作为输入给出,什么是失配函数的输出
如您链接的页面下面所述,输入的类型必须是单通范围概念的模型
有关增压范围的更多信息,请访问
如上所述,最常见的用途是通过标准容器。内置阵列也可以工作。和boost::iterator_range
允许您使用构成一个范围的任何一对(正向)迭代器
所以你本来可以
vector<string> vec { ... };
list<string> lis { ... };
auto result = mismatch(vec, lis);
向量向量{…};
名单{…};
自动结果=不匹配(vec、lis);
这里的
result
将具有类型pair
范围是在同一容器上运行的一对迭代器。SinglePassRange
是这样一个范围,其中迭代器是单通迭代器,即可比较且可递增的迭代器。通过重载mismatch
函数,参数也可能是支持该类型范围迭代器的容器,在这种情况下,使用容器的begin()
和end()
迭代器
返回值是不满足等式谓词的第一对迭代器(每个范围一个迭代器)。这一对是模板参数声明后的前几行所描述的
std::pair <
typename range_iterator<SinglePassRange1>::type,
typename range_iterator<const SinglePassRange2>::type
>
std::pair <
typename range_iterator<SinglePassRange1>::type,
typename range_iterator<const SinglePassRange2>::type
>
auto mismatch(auto &rng1, auto &rng2){
auto it1 = rng1.first, it2 = rng2.first;
while (it1 != rng1.second && it2 != rng2.second)
if (it1 != it2)
break;
else { ++it1; ++it2; }
return make_pair(it1, it2);
}