Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这个使用boost::mismatch的示例意味着什么?_C++_Templates_Boost_Syntax_Mismatch - Fatal编程技术网

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);  
 }