我所说的范围是指一对迭代器。在伪C++中:
std::vector<int> v1 = { 1, 2, 3, 4, 5 };
std::vector<int> v2 = { 2, 3, 4 };
if( std::compare_range( v1.begin() + 1, v1.end() - 1, v2.begin(), v2.end() ) {
std::cout << "Alright\n";
}
当然,compare_range
就是我要找的函数。
免责声明:我知道这是一个写起来很简单的函数。但就像所有的程序员一样,我试着变得懒惰;-)
发布于 2011-03-23 20:26:19
std::equal
是您正在寻找的函数模板。
if (std::equal(v1.begin() + 1, v1.end() - 1, v2.begin())
{
std::cout << "Alright\n";
}
请注意,std::equal
只接受三个参数,而不是四个。
发布于 2011-03-23 20:27:04
使用std::equal
-它也支持范围。
发布于 2011-03-23 20:45:34
似乎,没有标准的“单函数”方法。上述std::equal假设第二个范围不小于第一个范围。例如,当第二个间隔为空时,这可能会导致内存损坏。当第二个范围更大时,它也不给出答案。
std::equal和std::distance组合,或者自写函数:
template <class InputIterator1, class InputIterator2>
bool safe_equal( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 )
{
return ( std::distance( first1, last1 ) == std::distance( first2, last2 ) )
&& std::equal( first1, last1, first2 );
}
对于非随机访问迭代器,上面的函数可以遍历containter两次,但使用标准函数。如果这是不可接受的,那么编写自己的实现可能是合理的。
https://stackoverflow.com/questions/5405203
复制相似问题