这个使用boost::mismatch的例子是什么意思?
What does this example of using boost::mismatch mean?
我试着理解下面给出的例子:
template<class SinglePassRange1, class SinglePassRange2>
std::pair <
typename range_iterator<SinglePassRange1>::type,
typename range_iterator<const SinglePassRange2>::type
>
mismatch(SinglePassRange1& rng1, const SinglePassRange2& rng2);
下面是描述:
mismatch查找对应元素的第一个位置从两个范围来看,rng1和rng2不相等。
在上面的例子中,我不清楚的主要事情是:什么是不匹配函数的输入,什么是输出?
rng1
和rng2
分别是SinglePassRange1
和SinglePassRange2
类的对象。但是这些类是什么呢?它们在哪里定义?它们应该是"范围",但什么是"范围"?
我也不清楚mismatch
函数调用之前的所有这些行是做什么的。第一行看起来像是要定义一个类模板,但后面没有这样做。
range是一对操作在同一容器上的迭代器。SinglePassRange
是这样一个范围,其中迭代器是单遍迭代器,即:可比较和可递增的迭代器。通过重载mismatch
函数,形参也可以是支持该类型范围迭代器的容器,在这种情况下,使用容器的begin()
和end()
迭代器。
返回值是不满足相等谓词的第一对迭代器(每个范围中的一个)。这对就是模板形参声明后的前两行所描述的。
std::pair <
typename range_iterator<SinglePassRange1>::type,
typename range_iterator<const SinglePassRange2>::type
>
可以看到,每个实参都是每个范围类型的范围迭代器的类型。
参数之前的关键字typename
是必要的,因为它们实际上是依赖的名称,即。在其他类型中定义的类型,这些类型本身依赖于外部模板参数(SinglePassRange1
和2)。
mismatch
函数可能类似于以下(省略类型):
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);
}
我也不清楚这些行前的召唤是什么失配函数。第一行看起来我们要定义一个类模板,但我们以后不这样做。
这不是一个例子。它是函数模板的声明,该模板是boost range库的一部分。
在上面的例子中,我不清楚的主要是:什么作为输入,失配函数的输出是什么?
正如您所链接的页面下面进一步说明的那样,输入必须具有单一通道范围概念模型的类型。
更多关于增压范围的信息,请访问http://www.boost.org/doc/libs/1_50_0_beta1/libs/range/doc/html/range/introduction.html
如前所述,最常见的用法是传入标准容器。内置数组也可以工作。boost::iterator_range
允许使用任意一对(前向)迭代器来组成一个范围。
也就是
vector<string> vec { ... };
list<string> lis { ... };
auto result = mismatch(vec, lis);
这里result
的类型是pair<boost::range_iterator<vector<string>>::type, boost::range_iterator<list<string>>::type>
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思