oj笔记(关于一些遇到的问题)

stl–vector应用实例

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> odd ;
vector<int> even;

bool _judge_odd( int a)
{
    
    
    return (a%2==1);
}

void _print()
{
    
    
    for(int i=0; i<odd.size(); i++)
    {
    
    
        cout<<odd[i];
    }

    /*使用 迭代器的方法进行
    vector<int >iterator :: begin = odd.begin();
    vector<int >iterator :: end = odd.end();
    while(begin!=end){
     遍历
    }
    */

    for(int i=0; i<even.size(); i++)
    {
    
    
        cout<<even[i];
    }


}

int main()
{
    
    
    int value;
    for(int i =0; i<=9; i++)
    {
    
    
        cin>>value;
        //输入变量
        if(_judge_odd(value))
            odd.push_back(value);
        else
        {
    
    
            even.push_back(value);
        }
    }
    sort(even.begin(),even.end(),greater<int>());
    sort(odd.begin(),odd.end(),less<int>());
    _print();

}

一开始使用的代码是sort(odd.begin().odd.end(),less); 那么出错了。
下面给出sort的使用方法 :

#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector
//以普通函数的方式实现自定义排序规则
bool mycomp(int i, int j) {
    
    
    return (i < j);
}
//以函数对象的方式实现自定义排序规则
class mycomp2 {
    
    
public:
    bool operator() (int i, int j) {
    
    
        return (i < j);
    }
};

int main() {
    
    
    std::vector<int> myvector{
    
     32, 71, 12, 45, 26, 80, 53, 33 };
    //调用第一种语法格式,对 32、71、12、45 进行排序
    std::sort(myvector.begin(), myvector.begin() + 4); //(12 32 45 71) 26 80 53 33
    //调用第二种语法格式,利用STL标准库提供的其它比较规则(比如 greater<T>)进行排序
    std::sort(myvector.begin(), myvector.begin() + 4, std::greater<int>()); //(71 45 32 12) 26 80 53 33
   
    //调用第二种语法格式,通过自定义比较规则进行排序
    std::sort(myvector.begin(), myvector.end(), mycomp2());//12 26 32 33 45 53 71 80
    //输出 myvector 容器中的元素
    for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
    
    
        std::cout << *it << ' ';
    }
    return 0;
}

函数对象 : 如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。

#include <iostream>
using namespace std;

class CAverage
{
    
    
public:
    double operator()(int a1, int a2, int a3)
    {
    
      //重载()运算符
        return (double)(a1 + a2 + a3) / 3;
    }
};

int main()
{
    
    
    CAverage average; 
    cout << average(3, 2, 3); 
    return 0;
}

参考文档

C++函数对象详解
http://c.biancheng.net/view/7213.html

Guess you like

Origin blog.csdn.net/weixin_44724691/article/details/122387183