首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中有没有比较两个范围的标准方法?

在C++中有没有比较两个范围的标准方法?
EN

Stack Overflow用户
提问于 2011-03-23 20:24:50
回答 5查看 6.1K关注 0票数 26

我所说的范围是指一对迭代器。在伪C++中:

代码语言:javascript
复制
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就是我要找的函数。

免责声明:我知道这是一个写起来很简单的函数。但就像所有的程序员一样,我试着变得懒惰;-)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-23 20:26:19

std::equal是您正在寻找的函数模板。

代码语言:javascript
复制
if (std::equal(v1.begin() + 1, v1.end() - 1, v2.begin())
{
    std::cout << "Alright\n";
}

请注意,std::equal只接受三个参数,而不是四个。

票数 31
EN

Stack Overflow用户

发布于 2011-03-23 20:27:04

使用std::equal -它也支持范围。

票数 8
EN

Stack Overflow用户

发布于 2011-03-23 20:45:34

似乎,没有标准的“单函数”方法。上述std::equal假设第二个范围不小于第一个范围。例如,当第二个间隔为空时,这可能会导致内存损坏。当第二个范围更大时,它也不给出答案。

std::equal和std::distance组合,或者自写函数:

代码语言:javascript
复制
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两次,但使用标准函数。如果这是不可接受的,那么编写自己的实现可能是合理的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5405203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档