统计信息的动态输入
发布时间:2020-12-15 22:01:45 所属栏目:安全 来源:网络整理
导读:是否有类似于我用bash编写的实现的等效解决方案?通常,我总是像这样处理动态分配: (我喜欢第二个实现,因为它很灵活,我不需要知道我需要多少输入,我可以按原样输入它们.如何在C中实现类似的方法? C实施: double* get_data(int* data_size){ double* data_s
是否有类似于我用bash编写的实现的等效解决方案?通常,我总是像这样处理动态分配:
(我喜欢第二个实现,因为它很灵活,我不需要知道我需要多少输入,我可以按原样输入它们.如何在C中实现类似的方法? C实施: double* get_data(int* data_size) { double* data_set = NULL; int size = get_size(); int i; *data_size = size; data_set = malloc(size * sizeof(double)); for(i = 0; i < size; i++) { printf("Enter statistical data: "); scanf("%lf",&data_set[i]); } return data_set; } Bash实施: data_set=() while IFS= read -r -p 'Enter statistical data (empty line to quit):' input; do [[ $input ]] || break data_set+=("$input") done 解决方法
最简单的解决方案是使用C.但那不是你要问的,所以我会留在那里.
以下,虽然看起来很糟糕,但实际上通常非常有效(取决于你的C库的realloc实现,但它是GNU代码中常见的习惯用法,所以realloc实现通常很适合它): double* get_data(size_t *size_p) { size_t n = 0; double* data = NULL; double val; while (get_a_datum(&val)) { double* newdata = realloc(data,(n + 1) * sizeof *data); if (newdata == NULL) { free(data); report(error); } data = newdata; data[n++] = val; } if (size_p) *size_p = n; return data; } 如果您对这种方法不满意,可以滚动自己的指数realloc,在其中跟踪分配的向量的大小,如果要超过它,则加倍.但是,这是更多的代码,而realloc很可能会为你做到这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- twitter-bootstrap – Bootstrap .well .pull-right问题
- Angular Material 教程之布局篇 (五) : 布局参数
- 将参数传递给Scala中的App对象
- 使用AFNetWorking+XMLDictionary调用、解析Webservice
- AngularJS:ngInclude vs指令
- angular2 ng2-router 路由,嵌套路由详解
- scala – Slick:Codegen外键引用
- REST WebService与SOAP WebService的比较
- ansible_模块和剧本ansible_bookplay
- 基于bootstrap的网页开发(导航条和下拉菜单)