c++ 对vector<float>做线性插值
时间: 2023-07-18 16:49:28 浏览: 84
可以使用以下代码对`vector<float>`进行线性插值:
```c++
#include <vector>
std::vector<float> linear_interpolation(const std::vector<float>& input, const int num_output)
{
std::vector<float> output(num_output);
const float step = static_cast<float>(input.size() - 1) / (num_output - 1);
for (int i = 0; i < num_output; ++i)
{
const float idx = i * step;
const int idx0 = static_cast<int>(idx);
const int idx1 = std::min(idx0 + 1, static_cast<int>(input.size()) - 1);
const float t = idx - idx0;
output[i] = (1 - t) * input[idx0] + t * input[idx1];
}
return output;
}
```
其中,`input`为原始数据,`num_output`为插值后的数据数量。函数返回插值后的数据。
相关问题
c++ vector<float> 转 QByteArray
可以使用QByteArray的构造函数将vector<float>转换为QByteArray,然后使用QDataStream将QByteArray序列化为二进制数据。以下是示例代码:
```c++
#include <QByteArray>
#include <QDataStream>
#include <vector>
std::vector<float> vec = { 1.2f, 3.4f, 5.6f };
QByteArray byteArray(reinterpret_cast<const char*>(vec.data()), vec.size() * sizeof(float));
QByteArray serializedData;
QDataStream stream(&serializedData, QIODevice::WriteOnly);
stream << byteArray;
// 现在 serializedData 包含了 vector<float> 的二进制表示
```
请注意,此代码中的vector<float>必须是连续存储的。如果不是,则需要使用其他方法将其转换为QByteArray。
多个vector<float>合并为一个vector<float>
你可以使用`std::vector::insert`函数将多个`vector<float>`合并为一个`vector<float>`。具体地,你可以先创建一个空的`vector<float>`,然后依次将每个原始`vector<float>`的元素插入到这个新`vector<float>`中。以下是示例代码:
```c++
#include <vector>
std::vector<float> mergeVectors(const std::vector<std::vector<float>>& vectors) {
std::vector<float> result;
for (const auto& v : vectors) {
result.insert(result.end(), v.begin(), v.end());
}
return result;
}
```
在上述代码中,`mergeVectors`函数接受一个`std::vector<std::vector<float>>`类型的参数`vectors`,表示多个原始`vector<float>`。函数返回一个`std::vector<float>`类型的结果`result`,表示合并后的`vector<float>`。在函数中,我们遍历每个原始`vector<float>`,然后使用`std::vector::insert`函数将其元素插入到`result`中。注意,我们使用了迭代器的范围构造函数来指定插入的范围。