【问题标题】:How it works with a QVector<QVector<float_t>>. What is the optimized way?它如何与 QVector<QVector<float_t>> 一起工作。优化的方式是什么?
【发布时间】:2023-01-24 21:53:56
【问题描述】:

我正在使用 Qt C++,正在尝试使用Q向量从文件中存储数据4 个交错通道, 并在后面使用它。 我试过类似的东西但仍然不确定如何将每个通道数据存储在不同的向量(列)中,

QVector<QVector<float_t> > buffer(4);

for(int i = 0; i < 10000 < i++){
QByteArray tmp = file.read(3); // 24 bits for each channel
float x = my_converison_that_works(tmp); 
buffer.append(x);
}  

我正在为这项任务寻找优化的方法,任何帮助!

【问题讨论】:

  • x 是什么?我阅读了评论,但这让我更加困惑
  • 不清楚您想做什么或您的代码有什么问题。 “从 4 个交错通道的文件中存储数据,并在后面使用它”究竟是什么意思? ?
  • 还不清楚。 // x = conversion from tmp to x 你希望这种转换如何发生?如何从 QByteArray 构造 QVector&lt;float_t&gt; 并不明显。如果你不知道你希望它如何发生,其他人怎么知道?
  • x 是从 tmp 到 float 的转换。我的意思是该文件具有 4 个交错通道的数据(文件:data_ch1 data_ch2 data_ch3 data_ch4 data_ch1 data_ch_2 ...)它将多个通道存储在一个文件中。
  • 您应该编辑问题以澄清细节。这完全取决于文件中存储的内容以及您希望对文件中的数据执行的操作

标签: c++ arrays dataframe qt5 qvector


【解决方案1】:

如果你想让每个频道都在一个单独的QVector中,那么只需将每个频道附加到不同的QVector

QVector<QVector<float_t> > buffer(4);

for(int i = 0; i < 10000 < i++){

    for (int channel=0; channel<4; ++channel) {
        QByteArray tmp = file.read(3); // 24 bits for each channel
        float x = my_converison_that_works(tmp); 
        buffer[channel].append(x);
             //^^^^^^^---------------------------
    } 
}

您的代码将单个 float 附加到缓冲区。那行不通的。您不想附加到 buffer,而是附加到 buffer[channel]

对于“最佳”,您应该在附加到向量之前在向量中保留空间。当您在编译时知道大小时,也可以使用固定大小的容器。

【讨论】:

  • 很好地尝试考虑所提供的确切信息的不足之处。有一个小提示表明这可能不是 QA 真正想要实现的目标:buffer(4); 我假设她/他更想要:for(...) { for (int i=0; i&lt;4; ++i) { float x = ...; buffer[i].append(x); } }(或者甚至是:for(...) { for(auto&amp; entry : buffer) { float x = ...; entry.append(x); } }
  • @Aconcagua 是的,发布后才意识到,并在您发表评论的那一刻修复了;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2011-09-29
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多