怎么判断std::vector<float>是不是连续存储?
时间: 2023-07-27 17:18:39 浏览: 99
dict:具有类似 Python 功能的 C++ dict 类的概念验证
可以使用 `std::vector` 的 `data()` 函数获取它的数据指针,然后判断这个指针是否指向连续的内存空间,从而判断 `std::vector<float>` 是否是连续存储的。
以下是一个示例代码:
```c++
std::vector<float> vec = { 1.2f, 3.4f, 5.6f };
// 判断是否是连续存储
const float* data = vec.data();
bool isContiguous = true;
for (size_t i = 0; i < vec.size(); i++) {
if (&data[i] != &vec[i]) { // 比较地址是否相等
isContiguous = false;
break;
}
}
if (isContiguous) {
// 如果是连续存储,则可以将其转换为 QByteArray
QByteArray byteArray(reinterpret_cast<const char*>(data), vec.size() * sizeof(float));
} else {
// 如果不是连续存储,则需要使用其他方法来进行转换
}
```
这个方法的思路是将 `std::vector` 的数据指针与 `&vec[i]` 的地址进行比较,如果它们相等,则说明 `std::vector` 是连续存储的。如果不相等,则说明 `std::vector` 不是连续存储的。需要注意的是,这个方法只能在 `std::vector` 中没有元素被插入或删除的情况下使用,否则结果可能不正确。
阅读全文