存一些C++的用法

这篇博客详细介绍了C++中的一些常用标准库函数,包括accumulate用于计算序列元素之和,sort进行排序,以及begin、end、rbegin和rend对序列和字符串的迭代器操作。此外,还展示了pair的创建和成员访问,以及在实际问题中如何运用这些工具解决贪心算法问题。最后,通过一个ccf例题展示了sort和pair在排序查询中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

accumulate

C++中accumulate的用法

int sum = accumulate(vec.begin() , vec.end() , 42);  

accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。

sort

C++中 sort() 的使用

sort(begin, end, cmp)

其中begin为指向待sort()的数组的第一个元素的指针,end为指向待sort()的数组的最后一个元素的下一个位置的指针,cmp参数为排序准则,如果没有的话,默认以非降序排序。

begin,end,rbegin,rend

C++中string类下的begin,end,rbegin,rend的用法
begin()函数返回一个迭代器,指向字符串的第一个元素.
end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置).
rbegin()返回一个逆向迭代器,指向字符串的最后一个字符。
rend()函数返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)。

一个贪心算法求最短数列比数列外其他数和大的例子

class Solution {
public:
    vector<int> minSubsequence(vector<int>& a) {
        int sum=accumulate(a.begin(),a.end(),0);//数列a的全部和
        sort(a.rbegin(),a.rend());//逆序排序 从大到小
        vector<int> res;
        int pre=0;
        for(int x:a)
        {
            res.push_back(x);
            pre+=x,sum-=x;
            if(pre>sum)break;
        }
        return res;
    }
};

pair的用法

pair<T1, T2> p1;            //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1(v1, v2);    //创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。
p1.first;                   // 返回对象p1中名为first的公有数据成员
p1.second;                 // 返回对象p1中名为second的公有数据成员

ccf例题 202009-1称检测点查询
解答 使用了sort和pair

#include<iostream>
#include<algorithm>
//pair的应用
using namespace std;
pair<int,int> pii[205];
bool cmp(pair<int,int>a,pair<int,int> b){
    if(a.second == b.second)
        return a.first<b.first;
    return a.second<b.second;
}
int main()
{
    int n,X,Y;
    cin>>n>>X>>Y;
    for(int i=1;i<=n;i++){
        int x,y;
        cin>>x>>y;
        pii[i].first=i;
        pii[i].second=(x-X)*(x-X)+(y-Y)*(y-Y);
    }
    sort(pii+1,pii+1+n,cmp);//cmp是排序规则
    for(int i=1;i<=3;i++){
        cout<<pii[i].first<<endl;
    }
    return 0;
}

>> <<

右移操作符>> 相当于缩小为1/2
左移操作符<< 相当于扩大为2倍

& |

&有按位与的作用 相当于取交集
|表示或,相当于取并集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值