STL_算法_替换(replace、replace_copy、replace_if、replace_copy_if)

C++ Primer 学习中。。。

简单记录下我的学习过程 (代码为主)

所有容器适用

replace(b,e,ov,nv)      //把oldvalue替换成newvalue

replace_if(b,e,p,v)     //把符合p条件的替换成v

replace_copy(b1,e1,b2,ov,nv)

replace_copy_if(b1,e1,b2,p,v)

/**------http://blog.csdn.net/u010579068------**/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<algorithm>
using namespace std;

/*****************************************
//所有容器适用
replace(b,e,ov,nv)      //把oldvalue替换成newvalue
replace_if(b,e,p,v)     //把符合p条件的替换成v
replace_copy(b1,e1,b2,ov,nv)
replace_copy_if(b1,e1,b2,p,v)
*****************************************/
/**----------------------------------------------------------------------------------

----------------------------------------------------------------------------------**/
/*************************************************************************************
std::replace                     所有排序容器适用                           algorithm
--------------------------------------------------------------------------------------
template < class ForwardIterator, class T >
  void replace ( ForwardIterator first, ForwardIterator last,
                 const T& old_value, const T& new_value );

//eg:
template < class ForwardIterator, class T >
  void replace ( ForwardIterator first, ForwardIterator last,
                 const T& old_value, const T& new_value )
{
  for (; first != last; ++first)
    if (*first == old_value) *first=new_value;
}
*************************************************************************************/

/*************************************************************************************
std::replace_if                   所有排序容器适用                          algorithm
--------------------------------------------------------------------------------------
template < class ForwardIterator, class Predicate, class T >
  void replace_if ( ForwardIterator first, ForwardIterator last,
                    Predicate pred, const T& new_value );

//eg:
template < class ForwardIterator, class Predicate, class T >
  void replace_if ( ForwardIterator first, ForwardIterator last,
                    Predicate pred, const T& new_value )
{
  for (; first != last; ++first)
    if (pred(*first)) *first=new_value;
}
*************************************************************************************/

/*************************************************************************************
std::replace_copy                  所有排序容器适用                         algorithm
--------------------------------------------------------------------------------------
template < class InputIterator, class OutputIterator, class T >
  OutputIterator replace_copy ( InputIterator first, InputIterator last,
                                OutputIterator result,
                                const T& old_value, const T& new_value );

//eg:
template < class InputIterator, class OutputIterator, class T >
  OutputIterator replace_copy ( InputIterator first, InputIterator last,
                                OutputIterator result, const T& old_value, const T& new_value )
{
  for (; first != last; ++first, ++result)
    *result = (*first==old_value)? new_value: *first;
  return result;
}
*************************************************************************************/

/*************************************************************************************
std::replace_copy_if                  所有排序容器适用                     algorithm
--------------------------------------------------------------------------------------
template < class InputIterator, class OutputIterator, class Predicate, class T >
  OutputIterator replace_copy_if ( InputIterator first, InputIterator last,
                                   OutputIterator result, Predicate pred,
                                   const T& new_value );

//eg:
template < class InputIterator, class OutputIterator, class Predicate, class T >
  OutputIterator replace_copy_if ( InputIterator first, InputIterator last,
                                   OutputIterator result, Predicate pred,
                                   const T& new_value )
{
  for (; first != last; ++first, ++result)
    *result = (pred(*first))? new_value: *first;
  return result;
}
*************************************************************************************/

int main()
{
    int myints[] = { 10, 20, 30, 30, 20, 10, 10, 20 };
    vector<int> myvector (myints, myints+8);            // 10 20 30 30 20 10 10 20
//replace(b,e,ov,nv)
    replace (myvector.begin(), myvector.end(), 20, 99); // 10 99 30 30 99 10 10 99

    cout << "myvector contains:";
    for (vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
        cout << " " << *it;

    cout << endl;
    /**--------------------------------------------------------------------------------**/

    myvector.clear();
    vector<int>::iterator it;

    // set some values:
    for (int i=1; i<10; i++) myvector.push_back(i);          // 1 2 3 4 5 6 7 8 9

    replace_if (myvector.begin(), myvector.end(), bind2nd(modulus<int>(),2), 0); // 0 2 0 4 0 6 0 8 0

    cout << "myvector contains:";
    for (it=myvector.begin(); it!=myvector.end(); ++it)
        cout << " " << *it;

    cout << endl;
    /**--------------------------------------------------------------------------------**/

//    int myints[] = { 10, 20, 30, 30, 20, 10, 10, 20 };

    list<int> mylist (8);
    replace_copy (myints, myints+8, mylist.begin(), 20, 66);

    cout << "mylist  contains: ";
    for (list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
        cout << " " << *it;

    cout << endl;
    /**--------------------------------------------------------------------------------**/

    deque<int> first,second;
    deque<int>::iterator id;

    // set some values:
    for (int i=1; i<10; i++) first.push_back(i);          // 1 2 3 4 5 6 7 8 9

    second.resize(first.size());   // allocate space
    replace_copy_if (first.begin(), first.end(), second.begin(), not1(bind2nd(modulus<int>(),2)), 0);
    // 1 0 3 0 5 0 7 0 9

    cout << "second  contains: ";
    for (id=second.begin(); id!=second.end(); ++id)
        cout << " " << *id;

    cout << endl;

    return 0;
}

时间: 2024-12-20 18:46:20

STL_算法_替换(replace、replace_copy、replace_if、replace_copy_if)的相关文章

STL_算法(21)_ STL_算法_填充新值

STL_算法_填充新值 fill(b, e, v) fill(b, n, v) generate(b, n, p) generate_n(b, n, p) #include<iostream> #include<algorithm> #include<vector> #include<list> // #include<string> using namespace std; int main() { list<string> sli

STL_算法(22)_ STL_算法_替换算法

replace(b, e, ov, nv) replace_if(b, e, p, v) // 一边复制一遍替换 replace_copy(b1, e1, b2, ov, nv) replace_copy_if(b1, e1, b2, p, v) // 带有一个函数对象或者规则 #include<iostream> #include<algorithm> #include<list> // #include<functional> using namespa

STL_算法_查找算法(find、find_if)

C++ Primer 学习中. .. 简单记录下我的学习过程 (代码为主) find . find_if /**********************线性查找O(n) find(); find_if(); 注意: 1.假设是已序区间,能够使用区间查找算法 2.关联式容器(set,map)有等效的成员函数find();时间复杂度O(log(n)) 3.string 有等效的成员函数find(); **********************/ #include<iostream> #inclu

STL_算法_依据第n个元素排序(nth_element)

C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) //全部容器适用 nth_element(b,n,e) nth_element(b,n,e,p) 对照:partition()算法 /**------http://blog.csdn.net/u010579068------**/ #include<iostream> #include<cstdio> #include<string> #include<vector> #include

STL_算法_局部排序(partial_sort、partial_sort_copy)

C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) /***************************************** // partial_sort(b,se,e) partial_sort(b,se,e,p) partial_sort_copy(sb,se,db,de) partial_sort_copy(sb,se,db,de,p) *****************************************/ /**-------------

STL_算法_交换(swap_ranges)

C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) 所有容器适用 swap_ranges(b,e,b2)  //优点: 可局部交换.可以在不同类型容器间交换 注意:下列两种方法也是交换算法 1.容器的swap()成员函数 2.赋值操作 /**------http://blog.csdn.net/u010579068------**/ #include<iostream> #include<cstdio> #include<string> #incl

STL_算法_查找算法(lower_bound、upper_bound、equal_range)

C++ Primer 学习中. .. 简单记录下我的学习过程 (代码为主) //全部容器适用(O(log(n)))    已序区间查找算法 lower_bound()        //找第一个符合的元素,返回位置迭代器 upper_bound()        //找最后一个符合的元素.返回位置迭代器 equal_range()        //找一对迭代器pair(<>,<>) 关联式容器有等效的成员函数.性能更佳 #include<iostream> #incl

STL_算法_逆转(reverse,reverse_copy)

C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) //全部容器适用 reverse(b,e)        //逆转区间数据 reverse_copy(b,e,b2) /**------http://blog.csdn.net/u010579068------**/ #include<iostream> #include<cstdio> #include<string> #include<vector> #include<li

STL_算法_元素计数(count、count_if)

C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) count . count_if #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<set> #include<algorithm> using namespace std; /*********************** count count_if