AcWing 795. 前缀和 (附加vector和accumulate函数练习)

本文介绍了C++ STL中的accumulate函数及其使用,它用于计算给定范围内元素的累计和。文章通过对比两种不同的代码实现,展示了如何利用迭代器高效地计算数组子区间和,以及在大规模数据时避免时间超限的方法。同时,讨论了容器迭代器的概念,解释了如何定义和使用vector迭代器来访问和操作容器内的元素。
摘要由CSDN通过智能技术生成

1. accumulate函数介绍

accumulate函数包含在 #include<numeric> 头文件下,其中有三个参数,前两个参数是累加元素的范围,第三个参数是累加的初值。一般第三个参数值为0。

2. 容器迭代器的使用

每种容器类型都定义了自己的迭代器类型,如vector:vector< int>:: iterator iter;//定义一个名为iter的变量,数据类型是由vector< int>定义的iterator 类型。简单说就是容器类定义了自己的iterator类型,用于访问容器内的元素。每个容器定义了一种名为iterator的类型,这种类型支持迭代器的各种行为。
 

题目分析

题目需要计算从l-r范围的数组和,所以accumulate的前两个参数要从l到r,且需要是迭代器类型,所以定义两个迭代器

vector<int>::iterator p,q;

代码

使用accumulate函数,TLE:

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
vector<int> a(N);
int main(){
    int n,m,x,l,r;
    vector<int> a(N);
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    while(m--){
        scanf("%d %d",&l,&r);
        vector<int>::const_iterator p=a.begin()+l-1;
        vector<int>::const_iterator q=a.begin()+r;
        int sum=accumulate(p,q,0);
        printf("%d\n",sum);
    }
    return 0;
}

AC代码

 在输入数字的时候就计算出前i项数组的和s[i],然后使用s[r]-s[l-1]来求l-r的和

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N];
int s[N];
int main(){
    int n,m,l,r;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        s[i]=s[i-1]+a[i];
    }
    while(m--){
        scanf("%d %d",&l,&r);
        printf("%d\n",s[r]-s[l-1]);
    }
    return 0;
}

(112条消息) C++的STL中accumulate函数用法_遂..的博客-CSDN博客_accumulate函数c++

 (112条消息) C++容器vector的数组片段截取操作_stitching的博客-CSDN博客_vector截取一部分

 (112条消息) C++之迭代器(Iterator)篇_CSDN_564174144的博客-CSDN博客_c++迭代器

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值