gpt4 book ai didi

c++ - 为什么没有 set_union 等使用容器类型而不是迭代器的便利函数?

转载 作者:太空狗 更新时间:2023-10-29 23:34:03 25 4
gpt4 key购买 nike

std::set_union 及其同类采用两对迭代器来操作集合。这很棒,因为它是最灵活的事情。然而,他们可以很容易地制作一个额外的便利功能,这对于 80% 的典型用途来说会更加优雅。

例如:

template<typename ContainerType, typename OutputIterator>
OutputIterator set_union( const ContainerType & container1,
const ContainerType & container2,
OutputIterator & result )
{
return std::set_union( container1.begin(), container1.end(),
container2.begin(), container2.end(),
result );
}

会变成:

std::set_union( mathStudents.begin(), mathStudents.end(), 
physicsStudents.begin(), physicsStudents.end(),
students.begin() );

进入:

std::set_union( mathStudents, physicsStudents, students.begin() );

所以:

  • 是否有像这样的便利功能隐藏在我尚未找到的地方?

  • 如果不是,有谁能说出它被排除在 STL 之外的原因吗?

  • boost 中是否有功能更全的集合库? (我找不到)

我当然可以始终将我的实现放在实用程序库中的某个地方,但是很难将这些东西组织起来,以便它们在所有项目中使用,但又不会不恰本地集中在一起。

最佳答案

Are there convenience functions like this hiding somewhere that I just haven't found?

不在标准库中。

If not, can anyone thing of a reason why it would be left out of STL?

算法的一般思想是它们使用迭代器,而不是容器。容器可以修改、改动和戳戳;迭代器不能。因此,您知道,在执行算法后,它并没有改变容器本身,只是潜在地改变了容器的内容。

Is there perhaps a more full featured set library in boost?

Boost.Range做这个。诚然,Boost.Range 的作用远不止于此。它的算法不采用“容器”;他们采用迭代器范围,STL 容器恰好满足这些条件。他们也有惰性求值,这对性能有好处。

关于c++ - 为什么没有 set_union 等使用容器类型而不是迭代器的便利函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com