如何用C++实现仅打印Candlestick数据前几行?
解决方案
方法1:添加可选参数控制打印行数(推荐)
这种方式灵活性更高,既可以按需指定打印行数,也能保留打印全部数据的能力。
步骤1:修改Candlestick.h的函数声明
给printCandlestickTable添加一个可选的行数限制参数:
static void printCandlestickTable(std::vector<Candlestick> candles, int maxRows = 10); // 默认打印前10行
步骤2:更新Candlestick.cpp的实现逻辑
修改循环部分,只打印指定行数的数据,同时处理数据量不足的边界情况:
void Candlestick::printCandlestickTable(std::vector<Candlestick> candles, int maxRows) { std::cout << "time" << "\t" << "product" << "\t" << "type" << "\t" << "high" << "\t" << "low" << "\t" << "open" << "\t" << "close" << std::endl; // 取限制行数和实际数据量的较小值,避免越界 int printCount = std::min(maxRows, (int)candles.size()); for (int i = 0; i < printCount; ++i) { candles[i].printCandlestick(); } // 可选:添加数据总量提示 if (candles.size() > printCount) { std::cout << "... 共" << candles.size() << "条数据,仅显示前" << printCount << "条" << std::endl; } }
步骤3:调用时按需指定行数(可选)
如果需要打印其他行数(比如前20行),在MerkelMain.cpp中修改调用:
Candlestick::printCandlestickTable(candles, 20);
保持默认打印前10行的话,直接用原调用写法即可:
Candlestick::printCandlestickTable(candles);
方法2:硬编码限制打印行数(快速临时方案)
如果只是临时需求,不想修改函数接口,可以直接修改Candlestick.cpp的循环逻辑:
void Candlestick::printCandlestickTable(std::vector<Candlestick> candles) { std::cout << "time" << "\t" << "product" << "\t" << "type" << "\t" << "high" << "\t" << "low" << "\t" << "open" << "\t" << "close" << std::endl; int count = 0; const int maxRows = 10; // 固定打印前10行 for (Candlestick & candle : candles) { if (count >= maxRows) break; candle.printCandlestick(); count++; } if (candles.size() > maxRows) { std::cout << "... 共" << candles.size() << "条数据,仅显示前" << maxRows << "条" << std::endl; } }
修改后,控制台只会输出表头和指定行数的K线数据,不会被大量输出淹没,方便查看表头和核心数据。
内容的提问来源于stack exchange,提问作者Nicole
相关产品推荐
相关产品推荐

