C++ STL为何分离数据结构和算法

C++ STL为何分离数据结构和算法,c++,stl,C++,Stl,(对不起,我英语不好,我是伊朗人) 我们知道oop的目的是合并数据结构和算法以提供单个实体。因此STL将它们分开。为什么STL没有将其自己的方法编写为成员函数???考虑实现您的建议-每个数据结构都必须重新实现每个算法: template <typename T> class vector { auto for_each(/* ... */) { /* ... */ } auto partition(/* ... */) { /* ... */ } auto s

(对不起,我英语不好,我是伊朗人)
我们知道oop的目的是合并数据结构和算法以提供单个实体。因此STL将它们分开。为什么STL没有将其自己的方法编写为成员函数???

考虑实现您的建议-每个数据结构都必须重新实现每个算法:

template <typename T>
class vector
{
    auto for_each(/* ... */) { /* ... */ }
    auto partition(/* ... */) { /* ... */ }
    auto sort(/* ... */) { /* ... */ }
    /* ... */
};

template <typename T>
class list
{
    auto for_each(/* ... */) { /* ... */ }
    auto partition(/* ... */) { /* ... */ }
    auto sort(/* ... */) { /* ... */ }
    /* ... */
};

template <typename TK, typename TV>
class map
{
    auto for_each(/* ... */) { /* ... */ }
    auto partition(/* ... */) { /* ... */ }
    auto sort(/* ... */) { /* ... */ }
    /* ... */
};
模板
类向量
{
自动为每个(/*…*/){/*…*/}
自动分区(/*…*/){/*…*/}
自动排序(/*…*/){/*…*/}
/* ... */
};
模板
班级名单
{
自动为每个(/*…*/){/*…*/}
自动分区(/*…*/){/*…*/}
自动排序(/*…*/){/*…*/}
/* ... */
};
模板
类图
{
自动为每个(/*…*/){/*…*/}
自动分区(/*…*/){/*…*/}
自动排序(/*…*/){/*…*/}
/* ... */
};
如您所见,存在严重的代码重复。此外,这种方法是不可维护的,因为添加新算法需要更改每个容器的实现


如果将同时被纳入标准,那么您将能够调用标准容器上的算法,就好像它们是成员函数一样:

std::vector<int> v{/* ... */};
v.sort(); // Actually calls `std::sort(v)` thanks to UFCS.
std::vector v{/*…*/};
v、 排序();//实际上调用'std::sort(v)`多亏了UFCS。

因为N个算法+M个数据结构比N个算法*M个数据结构要少编写代码。为什么不编写一个任何人都可以使用的算法,而不是让你自己编写,因为没有通用函数。如果你将一个算法作为成员函数,你就不能将它用于其他行为类似的对象。STL是永远不要啊。因为Stepanov是聪明的,它不是真正的数据结构(通常)和分离的算法(大多数
std
结构确实包含一些方法!)。在大多数情况下,容器类型和算法是分开的。