C++ STL算法有两个特点:
算法使用模板提供泛型,其次使用迭代器来提供容器的通用表示
1. 算法分组
常见的算法如下
sort
copy
find
random_shuffle
set_union
set_intersection
set_difference
transform
STL 将算法库分为4组:
a. 非修改式序列操作
这些操作不修改容器的内容,例如find 或者for_each
b. 修改式序列操作
可以对区间的每个元素进行修改操作。可以修改值,也可以值的排列顺序
例如 transform random_shuffle copy
c. 排序和相关操作
例如 sort
d. 通用数字运算
计算区间的内容累积,乘积等
前三者包含在algorithm
后者包含在 numberic
2. STL 泛型算法
2.1 copy
template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
典型实现
template<class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
while (first!=last) {
*result = *first;
++result; ++first;
}
return result;
}
// copy algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::copy
#include <vector> // std::vector
int main () {
int myints[]={10,20,30,40,50,60,70};
std::vector<int> myvector (7);
std::copy ( myints, myints+7, myvector.begin() );
std::cout << "myvector contains:";
for (std::vector<int>::iterator it = myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
2.2 sort remove … 参考c++ ref
3. STL 容器的成员算法
某些容器的实现提供了成员函数形式的算法,比如容器list
可以调用list::remove(val),从而删除list中元素值为val的所有元素,同时调整链表长度
STL 泛型算法也有一个remove 函数模板,该模板并不会改变链表长度(参考相关资料)