复杂数组的数组
Array of complex arrays
我正在处理一个数组和一个数组数组:
typedef std::valarray<Complex> CArray;
CArray ca;
CArray x[16];
做:
x[0] = ca;
做硬拷贝还是只是参考?
如何使CArray x[16]
只是16个指针的列表,这些指针稍后将分配给现有数组?即如何避免硬拷贝?
我不确定这个:
CArray *x[16];
x[0] = *ca;
要创建指针数组,确实应该使用
CArray *x[16];
要从值或引用类型进行赋值,请使用&操作员:
x[0] = &ca;
有两件事需要记住:
CArray ca
是一个自动对象,因此它的生存期仅限于变量的范围- 数组
x
没有初始化为任何值,如果您依赖于空指针,则必须自己初始化它
您是对的,x[0] = ca
将执行复制分配,这显然不是您想要的。
您的指针示例很接近,但您需要获得ca
:的地址
CArray *x[16];
x[0] = &ca;
但是,您必须非常小心地正确管理ca
的生存期,以免它过早地超出范围。
您可能需要研究使用智能指针。
编辑:给出您对另一个答案的评论
"难道没有一个系统可以确保数组在没有引用之前一直存在吗?(我来自Python,哪个垃圾收集器!">
是的,就像我之前提到的,你可能想要使用智能指针。如果x
将是唯一所有者,则可以从std::unique_ptr
开始:
std::unique_ptr<CArray> x[16];
将创建一个由16个唯一指针组成的数组,这些指针在不再被引用后将超出范围。以下是如何分配:
x[0] = std::make_unique<CArray>();
如果您希望其他对象参与内存的生存期(也就是说,在多个人完成对内存的引用之前,内存不会被释放(,则使用shared_ptr
:的过程非常相似
std::shared_ptr<CArray> x[16];
x[0] = std::make_shared<CArray>();
共享指针更容易使用,因为它们很容易被复制,但在时间和空间开销方面会付出一些代价。
相关文章:
- 将数组的元素插入映射的时间复杂度是多少?
- 复杂度 O(N) 数组和双精度
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 在数组中搜索复杂度高于 O(n) 的元素
- 以C++声明数组的时间复杂度
- 可视化 如何在C++中使用复杂变量数组
- C++ 数组循环的时间复杂度
- 复杂类型数组的静态初始化
- 使用 boost 读取复杂的 JSON 数组
- 将复杂的结构(带有结构的内部数组)从 C# 传递到C++
- 遍历二维数组的时间复杂度是多少
- 初始化二维数组时程序的时间复杂度
- 如何初始化复杂对象的数组
- 将复杂对象传递给 c++ 中的函数,但数组订阅运算符无法正常工作
- 尝试将复杂数组存储到类 c++ 中
- C++中的复杂数组 - 实部,想象部
- 编写算法以查找数组中最常出现的元素.给出算法的时间复杂度
- 如何使用数组通过引用对对象进行排序?(以一种不那么愚蠢/复杂的方式.)
- 使用复杂的数据结构(向量数组的数组数组)时内存泄漏