09~STL算法


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 函数模板,该模板并不会改变链表长度(参考相关资料)

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页