我有一个动态数组.但最初我不知道阵列的长度.我可以先做,我将它的长度设置为1,然后根据需要增加长度而不丢失以前存储的数据吗?
我知道我可以使用TList做这样的任务.但我想知道我是否可以用数组做到这一点?
我创建了一个动态数组,我需要将所有成员初始化为0.如何在C中完成?
int* array;
array = (int*) malloc(n*sizeof(int));
Run Code Online (Sandbox Code Playgroud) 我对C++比较陌生,从一开始就钻进了我不能做的事情
int x;
cin >> x;
int array[x];
Run Code Online (Sandbox Code Playgroud)
相反,您必须使用动态内存.但是,我最近发现上面会编译(虽然我得到了一个警告说它被ISO C++禁止).我知道,如果标准不允许这样做,这显然是一个坏主意,但我以前甚至都不知道这是可能的.
我的问题是,为什么g ++允许在标准不允许的情况下不动态分配的可变长度数组?另外,如果编译器可以这样做,为什么不在标准中呢?
我在Delphi 2009中有以下结构:
type
IndiReportIndi = record
IndiName: string;
NameNum: integer;
ReportIndiName: string;
end;
var
XRefList: array of IndiReportIndi;
Run Code Online (Sandbox Code Playgroud)
其中XRefList是动态数组.
我想将XRefList保存到FileStream.我该怎么做并包括所有IndiName和ReportIndiName字符串,以便以后从FileStream加载时它们都可以再次检索?
在使用new分配数组时如何调用构造函数?
例如,在下面的代码中,如何为A的每个实例化调用构造函数,将b的所有10个元素初始化为5?
void main() {
A[] a = new A[10];
}
class A {
int b;
this(int init) {
b = init;
}
}
Run Code Online (Sandbox Code Playgroud)
我猜这不可能,但我希望......
我想通过循环遍历所有元素并调用delete每个元素来删除动态分配的数组.
(我这样做是因为我必须将一个数组"移动"到另一个位置,即复制原始数组然后将其删除,但这比同时复制每个元素并delete单独调用它们要花费2倍的时间)
我有以下代码:
int main()
{
int *n=new int[2];
delete n;
delete (n+1);
}
Run Code Online (Sandbox Code Playgroud)
但每次运行时我都会收到分段错误....
虽然,这很好 - :
int main()
{
int *n=new int[1];
delete n;
}
Run Code Online (Sandbox Code Playgroud)
所以,我的猜测是删除以某种方式删除整个数组而不是单个元素!
任何人都可以解释我的猜测是否正确,如果是的话,建议一个可能的解决方法?
我在Ubuntu 13.04上使用GCC 4.7.3
我是C++的新手,我正在研究'压缩感应',所以我需要处理大型矩阵,而MATLAB实际上很慢,所以我用C++编写算法.
问题是我存储大数组(大约100Mb-1Gb).它们大约是20个阵列.它可以正常使用30 Gb的内存,但是当进程需要超过40Gb时,它就会停止.我认为这是一个内存问题,我在Linux和Windows上测试它(OS 64位 - 编译器64位MinGW - 200Gb Ram - intel Xeon)有任何限制吗?
size_t tm=n*m*l;
double *x=new double[tm];
Run Code Online (Sandbox Code Playgroud)
我使用大约20个像这样的阵列.n,m~ = 1000且L~ = 30这些通常是尺寸.
谢谢
当我在C++(T * p = new T[n])中分配动态数组时,我使用delete [] p释放分配的内存.显然,系统知道数组大小(按顺序调用n次T的析构函数).这在其他地方讨论过.例如,delete []"知道"操作数数组的大小是多少?.这是实施细节.
但为什么不决定提供这些信息呢?
谢谢
新函数UNIQUE是否可以跨不同列使用并将输出溢出到单个列中?
所需的输出是UNIQUE一列中的值,基于中存在的所有值Columns: A, B, & C(示例中为红色的重复项)
UNIQUE(A7:C7)我会得到跨列的溢出范围(这甚至不提供跨列的唯一值,这是出乎意料的)UNIQUE(A2:A6) & UNIQUE(B5:B10) & UNIQUE(C2:C5)但这只是连接了值(也出乎意料但不相关)我需要使用各种大小的2D numpy数组执行大量工作,我想将这些计算卸载到cython上.我的想法是我的2D numpy数组将从python传递到cython,在那里它将转换为c-array或内存视图,并用于其他c级函数的级联中进行计算.
经过一些分析后,由于一些严重的python开销,我排除了在cython中使用numpy数组.使用内存视图更快,更容易使用,但我怀疑我可以使用c-arrays进一步加速.
这是我的问题 - 我怎样才能在cython中声明一个2D c-array而不用设定值预定义它的尺寸?例如,我可以通过这种方式从numpy创建一个c-array:
narr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]], dtype=np.dtype("i"))
cdef int c_arr[3][4]:
for i in range(3):
for j in range(4):
c_arr[i][j] = narr[i][j]
Run Code Online (Sandbox Code Playgroud)
然后将其传递给函数:
cdef void somefunction(int c_Arr[3][4]):
...
Run Code Online (Sandbox Code Playgroud)
但这意味着我有一个固定的数组sizde,在我的情况下将是无用的.所以我尝试过这样的事情:
narr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]], dtype=np.dtype("i"))
cdef int a = np.shape(narr)[0]
cdef int b = np.shape(narr)[1]
cdef int c_arr[a][b]: # INCORRECT - EXAMPLE ONLY
for i in range(a):
for j in range(b):
c_arr[i][j] = narr[i][j]
Run Code Online (Sandbox Code Playgroud)
打算将它传递给这样的函数:
cdef void somefunction(int a, int b, int c_Arr[a][b]):
...
Run Code Online (Sandbox Code Playgroud)
但它不起作用,编译失败,错误"不允许在常量表达式中".我怀疑我需要以某种方式使用malloc/free吗?我看了一下这个问题(如何在Cython中声明2D列表),但它没有提供我的问题的答案.
dynamic-arrays ×10
c++ ×4
arrays ×2
c ×2
delphi ×2
bad-alloc ×1
constructor ×1
cython ×1
d ×1
excel ×1
filestream ×1
memoryview ×1
mingw-w64 ×1
numpy ×1
office365 ×1
pointers ×1
size ×1