» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 25 12
发新话题
打印

【编程相关】CPP的问题……求大伙帮忙……

引用:
原帖由 shixn 于 2010-7-4 14:55 发表
posted by wap

先不画曲线了……就求个均值吧……我觉得用数组不好,因为数据是不断增加的(学生数量不断增加),也就是说如果用结构体数组,数组的长度是未知的……
你难道不知道vector这东西?


TOP

引用:
原帖由 HyperIris 于 2010-7-4 11:06 发表
#include

std::vector my_array;

// 求平均
float sum = 0.0f;
for (size_t i=0; i<my_array.size(); i++)
{
sum += my_array;
}
  
for 里面的 i 用在哪里?



TOP

class studentArray
{
     public:
     class student
     {
          int studentID;
          CString studentName;
          double StudentHeight;//身高
           
      }
     void addStudent(int studentID, CString studentName, double studentHeight)
     {
        m_studentArray.push_back(new student(studentID, studentName, studentHeight))
     }
     double averageHeight()
     {
        std::vector<student*>::iterator it = m_studentArray.begin();
        double sum = 0.0;
        for(;it != m_studentArray.end(); ++it)
        {
          sum+= it->studentHeight;
        }
        return ( sum / double(m_studentArray.size()));
     }
private:
std::vector<studentArray*> m_student;
}

//使用方式
studentArray students;
students.add(1001, "yang", 180);
students.add(1002, "zhang", 172);
double averHeight = students.averageHeight();

至于方差 公式忘了 基本也是不难求的

至于画曲线 我不太明白楼主想要的是哪种 可以很复杂 可以很简单
一种最简单的思路是 求students中最高 和 最低 的差值作为 竖坐标
学生的个数做为横坐标 并以一定的粒度统计 一定数量的人 的 一定身高
举个最简单的例子 就是每个人都是曲线上一点 横坐标就是1个人竖坐标是该人身高


本帖最近评分记录
  • shixn 激骚 +8 我很赞同 2010-7-5 23:16

TOP

补充一下:
vector只适合存放指针 而不是结构或者对象 性能很差

楼主在析构时需要手动删除没一个学生对象~

TOP

posted by wap, platform: Android

话说。为啥不用数据库。。。

TOP

引用:
原帖由 猫猫猫 于 2010-7-4 18:07 发表


for 里面的 i 用在哪里?
代码里写了,提交帖子好像被系统给删掉了,233

顺便回楼上某些贴,lz这意思看起来也就是鼓捣个作业之类的罢了,至于搬出什么溢出吗,那索性用大数计算好了,有现成的也可以自己写,1024位够不够啊?
还有什么vector的性能,你研究过vector下面的内存管理吗?就lz这么点数据,提前给vector reserve 10w个元素,以后push_back几天才能重分配几次内存?

TOP

回ls 我说的是vector直接存取对象的性能, vector存取每一个对象都会调用对象的拷贝构造函数 我并没有搬出溢出之类的。。请ls不用动肝火。。

TOP

引用:
原帖由 ypandoo 于 2010-7-4 19:59 发表
回ls 我说的是vector直接存取对象的性能, vector存取每一个对象都会调用对象的拷贝构造函数 我并没有搬出溢出之类的。。请ls不用动肝火。。
说溢出是在你楼上的,

另外对于first class数据类型,并不存在过高的性能瓶颈,编译器实际生成的只是个memcpy,要避免拷贝构造函数调用也很容易,在vector里面保存对象指针即可。为了避免内存碎片还可以用mem pool。
这种话题要说细了,比如说用std::list 代替std::vector,虽然某种程度上是轻松了(避免了vector内部的mem扩容操作),但是内存使用会每个对象增大至少4个字节,要是保存数百万节点,浪费非常可观。

当然这些我想对于lz完全没有任何意义。
最简单的解决办法,fopen fwrite fclose往硬盘上存就是了。求什么平均的时候从硬盘读取计算就是了。听起来慢,实际上也就几秒。

TOP

引用:
原帖由 ypandoo 于 2010-7-4 19:59 发表
回ls 我说的是vector直接存取对象的性能, vector存取每一个对象都会调用对象的拷贝构造函数 我并没有搬出溢出之类的。。请ls不用动肝火。。
除非用指针,否则所有容器直接存取对象都有你说的这个问题,和vector有什么关系。。。

当然vector扩容的时候有可能会有内存拷贝的开销,但这一般情况下基本可以忽视

TOP

其实就是个采集办卡的通讯软件,数据量大概是每秒40000字节,连续工作起码要5个小时以上,如果连续24小时不出问题就很理想了……
俺电脑是i3的CPU,内存4G,500G硬盘。。。会出问题么?

俺编程是业余,没系统的学过,遇到问题现google。。。各位能不能推荐本书给我?就是讲这方面知识的,俺目前只有孙鑫和侯捷的2本入门神书……

[ 本帖最后由 shixn 于 2010-7-4 23:57 编辑 ]

TOP

 25 12
发新话题
     
官方公众号及微博