如何保存**双的数据
How to keep data of a **double?
假设我有一个类有一个指针成员的双指针:
public:
double **pSamples;
在成员类函数中,有时,我会使用RAII习语填充这个"矩阵":
void LoadWave() {
vector<vector<double>> samplesContainer(mWaveNumChannels, vector<double>(mWaveReader.GetSize()));
vector<double*> ptrs(mWaveNumChannels);
for (size_t i = 0; i != mWaveNumChannels; ++i) {
ptrs[i] = samplesContainer[i].data();
}
pWaveSamples = ptrs.data();
mWaveReader.ReadDoublesNI(pWaveSamples, 0, mWaveReader.GetSize());
}
一切都好!但现在,如果稍后在另一个函数中我尝试迭代/管理指针的指针,我会遇到访问冲突。
我认为是因为LoadWave()结束时向量释放/销毁对吗?
你将如何保持这样的数据/矩阵?所以我以后可以重复使用它?
您生成了一个悬空指针,这当然会导致访问冲突。C++的解决方案是避免使用原始指针,但让内存通过某种方法进行管理,最好使用标准库容器。
一种懒惰的方法是
class myclass
{
std::vector<double > samplesContainer;
std::vector<double*> samples;
void setPter(std::size_t num_samples, std::size_t smaple_size)
{
samplesContainer.resize(num_samples*smaple_size);
samples.resize(num_samples)
for(std::size_t n=0; n!=num_samples, ++n)
samples[n] = &(samplesContainer[n*smaple_size])
}
const double**psample() const { return samples.data(); }
/* ... */
};
尽管1D矢量的2D阵列自适应(其将不需要/提供double**
)实现起来相当简单。
从您的评论中,我怀疑您使用的框架不是C++,或者写得很差:一个好的C++接口不会使用double**
(甚至double*
),无论效率如何。
相关文章:
- 使用C++项目将数据保存在磁盘上
- 如何使用for循环将数据保存在不同的文件中?
- Arduino Makefile:如何将传感器数据保存到计算机中的文件中
- 使用Nlohmann JSON将JSON数据保存在文件中时获取空值
- 如何将外部文件中的数据保存到 2D 数组中?(C++)
- 从文件读取时将数据保存到指针数组
- 如何将枚举类型数据保存到文件
- 协议缓冲区;将数据保存到磁盘并重新加载问题
- 将数据保存到空闲主机上的文件中
- 将所有控制台输出数据保存到新的文本文件C++
- 尝试将数据保存到数组中时出现ifstream运行时错误
- 将数据保存并加载到文件 c++(初学者)
- c语言 - fprintf() 函数无法将数据保存到文件中;后面必须跟着 fflush() 函数吗?
- 如何在 c++ 中将字节类型的字符数组数据保存到文件中
- 运行程序,将数据保存在文本文件中并读回
- 将结构数据保存到 C++ 中的地图
- 将数据保存在缓存中的技术,位置
- 可视化地将数据保存到文件c++中
- 试图找出一种可移植的数据保存方法
- 将数据保存在用户无法访问的文件中C++?