gpt4 book ai didi

c++ - 返回结构成员数组的最有效方法

转载 作者:行者123 更新时间:2023-11-30 03:01:39 26 4
gpt4 key购买 nike

我有一个像这样的结构:

struct ohlc{
double open,high,low,close;
};

我的部分应用程序使用了这些的集合。有时带有时间戳。我的应用程序的另一部分使用需要 double 组的第三方(封闭)库,例如close[] 或 open[] 等

返回 open[]、close[] 等双数组的最合适的容器和方法是什么。目前,我使用 vector 并遍历整个集合来创建数组。有没有更高效的方法。

我什至可能完全错误地理解我当前对结构的使用?我所拥有的是出价/要价的价格馈送。我尝试维护 M1、M5、M15 和 H1 蜡烛条的集合,即 OHLC 数据。通常我只需要 100 小时的数据。当新一分钟的价格出现时,我可以删除最旧的一分钟,从而随时保持 100 小时的数据值(value)。由于 H1、M15、M5、M1 都可以根据带时间戳的要价/出价的基础数据创建,出于性能原因,我是否仍需要持有独立的 H1、M15 等。我问这是因为它是数据重复?

编辑:我目前的方法对于我通常的目的来说很好,但现在我正在“回测”,我在我的代码中投入了数百万的出价/要价,并需要它尽可能高效。回溯测试目前可能需要数小时才能完成

我从我的结构集合中返回如下:

std::vector<double> Series::EODSeries::open( const_iterator iter, unsigned long num ) const
{
vector<double> v;

if( iter == end() )
return v;

// reverse iterator init skips the first element in collection. We must manually insert the current element.
v.insert(v.begin(), iter->second.open);
unsigned i = 1;
for( const_reverse_iterator rev_iter(iter); i < num && rev_iter != rend(); ++rev_iter, ++i )
v.insert(v.begin(), rev_iter->second.open);

return v;
}

最佳答案

你说第三方应用程序需要 double 组,但这有点误导,因为数组不能作为 C++ 中的参数——它们总是衰减为指针。

所以您可以做的只是将指针传递给 vector 的第一个参数。这保证有效。

// Assuming the following signature:
void the_method(double arg[]);
// is actually the same as:
// void the_method(double* arg);

std::vector<double> open; // your vector
the_method(&open[0]);

但是,如果我误解了你,你实际上有一个 std::vector<ohlc>那么你基本上就不走运了——你确实需要复制 openclose vector 的元素中的成员放入它自己的容器中。但即便如此,我还是建议您使用 vector 在您的代码中,而不是 C 数组。

关于c++ - 返回结构成员数组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10860338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com