| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2278 人关注过本帖
标题:C++初学者真诚求高手指点,万谢万谢!
只看楼主 加入收藏
dyyuibe
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
C++初学者真诚求高手指点,万谢万谢!
请看一下程序:
#include "stdafx.h"
#include <iostream>
#include<fstream>
#include<vector>
#include<cmath>
using namespace std;
class MVector
{
  // storage for the new vector class
  std::vector<double> v;
  public:
    // constructor
    explicit MVector(){};
    explicit MVector(int n):v(n){};
    explicit MVector(int n,double x):v(n,x){};
    // destructor
    ~MVector(){};
    // equate vectors;
    MVector& operator=(const MVector& X)
    {if(&X==this)return *this;v=X.v;return *this;};
    // access data in vector
    double& operator[](int index){return v[index];};
    // access data in vector (const)
    double operator[](int index) const {return v[index];};
    // size of vector
    int size() const {return v.size();};
 void push_back(double x){v.push_back(x);}
}; // end class MVector

    void runningaverage(const MVector &v,int m,int p)
 {
      MVector runningaverage(v.size()-m-p);
 cout << " runningaverage:= ( ";

   for(int i=0;i<=runningaverage.size();i++)
   {
    double sum=0.;
    for(int j=i;j<=i+m+p;j++){sum+=v[j];}
    runningaverage[i]=sum/(m+p+1);
    cout << runningaverage[i] << " " ;
   }
cout << ")\n";

 }
   
int main(int argc, char** argv)
{
 MVector x;
    x.push_back(1.2);
 x.push_back(2.1);
 x.push_back(1.9);
    x.push_back(3.4);
 x.push_back(3.9);
 x.push_back(2.7);
 x.push_back(1.6);
 x.push_back(2.3);
 x.push_back(2.4);
 cout << " x:= ( ";
 for (int i=0;i<x.size();i++)
  cout << x[i] << "  ";
 cout << ")\n";
 runningaverage(x,2,1);
}
先说下我想求一个数列的移动平均数runningaverage,其定义见附件的图。
之前都是好好,Class MVector的部分是照搬老师的,完全没有问题,问题出现在加了runningaverage函数以后,所以你仔细看看runningaverage的循环。结果是能运行出来的,就是跳出俩窗口说
1、Expression:vector subscript out of range.
2、Expression:("Standard C++ libraries out of range",0)
为什么会这样呢?不明白。求解答。
万谢万谢!!
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 万谢万谢 真诚 
2010-11-15 10:09
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:10 
for(int i=0;i<=runningaverage.size();i++)注意容器的大小,两个范围都越界了。编译器在执行你的程序后进行错误检测。

离恨恰如春草,更行更远还生。
2010-11-15 15:28
dyyuibe
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-15
收藏
得分:0 
回复 2楼 玩出来的代码
什么意思?我才学了俩月不明白。

什么叫容器过界?

那还有救吗?

要怎么改才能把这个running average算出来呢?
2010-11-15 18:29
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:10 
程序代码:
#include <iostream>
#include<fstream>
#include<vector>
#include<cmath>
using namespace std;
class MVector
{
    // storage for the new vector class
    std::vector<double> v;
public:
    // constructor
    explicit MVector(){};
    explicit MVector(int n):v(n){};
    explicit MVector(int n,double x):v(n,x){};
    // destructor
    ~MVector(){};
    // equate vectors;
    MVector& operator=(const MVector& X)
    {if(&X==this)return *this;v=X.v;return *this;};
    // access data in vector
    double& operator[](int index){return v[index];};
    // access data in vector (const)
    double operator[](int index) const {return v[index];};
    // size of vector
    int size() const {return v.size();};
    void push_back(double x){v.push_back(x);}
}; // end class MVector

void runningaverage(const MVector &v,int m,int p)
{
    MVector runningaverage(v.size()-m-p);
    cout << " runningaverage:= ( ";

    for(int i=0;i<runningaverage.size();i++)  //i<runningaverage.size() 改为这就ok 了
    {
        double sum=0.;
        for(int j=i;j<=i+m+p;j++){sum+=v[j];}
        runningaverage[i]=sum/(m+p+1);
        cout << runningaverage[i] << " " ;
    }
    cout << ")\n";

}

int main(int argc, char** argv)
{
    MVector x;
    x.push_back(1.2);
    x.push_back(2.1);
    x.push_back(1.9);
    x.push_back(3.4);
    x.push_back(3.9);
    x.push_back(2.7);
    x.push_back(1.6);
    x.push_back(2.3);
    x.push_back(2.4);
    cout << " x:= ( ";
    for (int i=0;i<x.size();i++)
        cout << x[i] << "  ";
    cout << ")\n";
    runningaverage(x,2,1);
}

If You Want Something, Go Get It, Period.
2010-11-15 18:36
dyyuibe
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-15
收藏
得分:0 
回复 3楼 dyyuibe
啊!!!好快好及时

谢谢你!!
2010-11-15 18:54
dyyuibe
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-11-15
收藏
得分:0 
回复 4楼 m21wo
不好意思,太激动了手一抖点回复点错了,回给自己那儿去了。

再次谢谢你!
2010-11-15 19:09
张丹
Rank: 2
等 级:论坛游民
帖 子:94
专家分:66
注 册:2010-6-7
收藏
得分:0 
我的也出现这种情况         779:   _DEBUG_ERROR("vector subscript out of range");
看看楼主的,对比一下,我的也没有什么不对的,但就是报这个错!简直很郁闷!!
2011-06-02 14:58
快速回复:C++初学者真诚求高手指点,万谢万谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019178 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved