You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现不退出函数返回值并模拟股票数据流存储

解决股票数据流模拟与数组存储的编译及功能问题

核心需求

  • 让feedgenerator函数持续返回递增的counter(对应时间)和随机生成的value(对应价格数据),模拟时序数据的连续更新,且不退出函数
  • makearray函数可接收数组长度参数,不能使用vector(追求性能),负责存储生成的数据
  • 修复原代码的编译错误,实现函数嵌套调用并正确输出存储的数据

原代码的关键问题

  • feedgenerator中return语句直接终止循环,无法持续生成数据;pause不是标准C++函数,无法实现延时
  • std::array的模板大小参数必须是编译期常量,无法用运行时传入的len赋值,不符合动态指定数组长度的需求
  • main函数指针使用错误:new double[]未指定数组大小,嵌套调用的参数类型不匹配,数组访问方式错误
  • 全局变量prevcntr的等待逻辑设计不合理,无法正确同步数据生成与存储流程

修正后的实现代码

#include <iostream>
#include <cstdlib>
#include <chrono>
#include <ctime>
#include <thread>

// 全局状态记录生成器的当前计数,简化实现
static long int current_cntr = 0;

// 持续生成时序数据:每次调用返回下一组(counter, value)
std::pair<long int, double> feedgenerator() {
    // 随机种子仅初始化一次
    static bool seeded = false;
    if (!seeded) {
        srand(static_cast<unsigned int>(time(nullptr)));
        seeded = true;
    }
    current_cntr++;
    // 模拟数据生成间隔,替代原代码的pause
    std::this_thread::sleep_for(std::chrono::microseconds(1));
    return {current_cntr, static_cast<double>(rand()) / RAND_MAX};
}

// 生成指定长度的数组并填充数据,返回动态分配的数组指针
double* makearray(long int len) {
    double* outarr = new double[len];
    for (long int itr = 0; itr < len; ++itr) {
        auto [cntr, value] = feedgenerator();
        outarr[itr] = value;
    }
    return outarr;
}

int main() {
    const long int len = 100000;
    // 嵌套调用生成数组
    double* data_array = makearray(len);

    // 输出前10条数据(避免输出10万条导致刷屏)
    std::cout << "前10条模拟数据:" << std::endl;
    for (int i = 0; i < 10; ++i) {
        std::cout << "第" << i+1 << "条:" << data_array[i] << std::endl;
    }
    // 输出最后10条数据
    std::cout << "\n最后10条模拟数据:" << std::endl;
    for (long int i = len - 10; i < len; ++i) {
        std::cout << "第" << i+1 << "条:" << data_array[i] << std::endl;
    }

    // 释放动态分配的内存,避免泄漏
    delete[] data_array;
    return 0;
}

关键优化说明

  • feedgenerator改进:用静态变量确保随机种子只初始化一次,每次调用返回递增的counter和随机value;使用标准库的std::this_thread::sleep_for实现数据生成间隔,替代原代码的非标准pause函数
  • makearray实现:采用动态分配的原生数组(double*),既满足运行时指定长度的需求,又保持与原生数组一致的高性能;通过循环直接调用feedgenerator填充数据,简化同步逻辑
  • main函数修正:修复指针使用错误,实现正确的嵌套调用;调整输出逻辑避免大量数据刷屏;添加内存释放操作,防止内存泄漏

内容的提问来源于stack exchange,提问作者csk 7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:36:29