欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++标准库笔记:算法--min/max/swap/iter_swap

程序员文章站 2022-10-22 23:33:05
两值中较大和较小值 泛型函数std::min返回两者之中较小值 泛型函数std::max返回两者之中较大值 #include #include using namespace std...

两值中较大和较小值

泛型函数std::min返回两者之中较小值
泛型函数std::max返回两者之中较大值

#include 
#include 

using namespace std;


bool int_ptr_less( int* left, int* right )
{
    return *left < *right;
}

int main()
{
    int a = 10;
    int b = 12;
    long c = 13;

    cout << std::min( a, b ) << endl;
    cout << std::max( a, b ) << endl;

    //注意,min和max都要求它们所接受的两个参数的型别必须一致,
    //若不一致,可以考虑使用显示模板参数
    cout << std::min( b, c ) << endl;

    //min和max的另一个版本,接收第三个参数作为比较准则
    cout << *std::min( &a, &b, int_ptr_less ) << endl;

    return 0;
}

两值互换

泛型函数std::swap用来交换两对象的值

int a = 10;
int b = 12;
long c = 13;
std::swap( a, b );

//错误:必须型别一致
//std::swap( a, c );

使用此函数来交换自定义的类型对象值也是可以的,只要其实现了赋值和复制函数,但有时针对复杂的自定义型别,会提供自己的特殊实作版本,如下:

#include 
#include 
#include 

using namespace std;

class mycontainer
{
public:
    //类内部实现交换
    void swap( mycontainer& other )
    {
        std::swap( m_int, other.m_int );
        m_vec.swap( other.m_vec );
    }
private:
    int m_int;
    std::vector m_vec;
};

//为此复杂类重载全局函数swap
inline void swap( mycontainer& c1, mycontainer& c2 )
{
    c1.swap( c2 );
}

交换两迭代器值

泛型函数std::iter_swap可交换两个迭代器所指内容,注:此处是交换迭代器所指元素的内容,而不是迭代器本身内容,迭代器也是一对象。

int a = 10;
int b = 12;

//指针可看作是迭代器,
std::iter_swap( &a, &b );

//容器第1、2两个元素互相交换
std::vector intvec;
intvec.push_back( 1 );
intvec.push_back( 2 );
std::iter_swap( intvec.begin(), intvec.begin() + 1 );
std::copy( intvec.begin(), intvec.end(), 
    std::ostream_iterator( cout, " " ) );
cout << endl;