标签: dynamic-arrays

如何使用gdb"观察"C++动态数组?

请考虑以下示例:

int size = 10, *kk = new int[size];

for (int i = 0; i < size; i++) {
    kk[i] = i;
}

delete [] kk;
Run Code Online (Sandbox Code Playgroud)

如何为整个阵列添加手表?我可以逐个添加一个手表(kk [0],kk [1] ...),但是因为我知道数组的长度是否有办法自动完成?我的意思是像kk [0..size-1]左右.

我正在使用NetBeans IDE和cygwin g ++和gdb.

c++ gdb dynamic-arrays

12
推荐指数
1
解决办法
5366
查看次数

在MATLAB中将大型数组直接写入磁盘时,是否需要预先分配?

我需要编写一个太大的数组,以适应.mat二进制文件的内存.这可以通过该matfile功能实现,该功能允许随机访问磁盘上的.mat文件.

通常,接受的建议是预分配数组,因为在循环的每次迭代中扩展它们都很慢.但是,当我问如何做到这一点时,我发现在写入磁盘而不是RAM时这可能不是一个好建议.

将打同样的性能不断增长的阵列应用,并且如果是这样,会是显著的时候相比,它需要写入到磁盘的时间呢?

(假设整个文件将在一个会话中写入,因此严重文件碎片的风险很低.)

performance file-io matlab large-data dynamic-arrays

12
推荐指数
1
解决办法
1707
查看次数

Excel VBA - 如何添加动态数组公式

我正在通过 VBA 向工作表添加一个公式,它应该是:

=UNIQUE(IF(TableA[ColumnA]=A1,TableA[ColumnB],""))
Run Code Online (Sandbox Code Playgroud)

这利用 Excel 中的新 SPILL 功能为我提供 B 列值列表,其中 A 列中的相关值与单元格 A 中的值相匹配。我还应用 UNIQUE 函数来删除任何多个空白 ("") 结果。

如果我手动将公式输入到 Excel 中,这非常有效,但是在使用 VBA 添加公式时,Excel 在公式中添加了 @ 符号,并导致它显示 #VALUE!。

用于添加公式的 VBA 行是:

=Cells(x,y).Formula = "=UNIQUE(IF(TableA[ColumnA]=A1,TableA[ColumnB],""""))"
Run Code Online (Sandbox Code Playgroud)

Excel 中的结果输出为:

=@UNIQUE(IF(TableA[@[ColumnA]]=A1,TableA[ColumnB],""))
Run Code Online (Sandbox Code Playgroud)

发生了什么,我错过了什么?

提前致谢!

excel vba excel-formula dynamic-arrays

12
推荐指数
1
解决办法
2546
查看次数

std :: vector是否将其值类型的赋值运算符用于push_back元素?

如果是这样,为什么?为什么不使用值类型的复制构造函数?

我收到以下错误:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc: In member functio
n `ClassWithoutAss& ClassWithoutAss::operator=(const ClassWithoutAss&)':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238:   instantiate
d from `void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterato
r<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp =
ClassWithoutAss, _Alloc = std::allocator<ClassWithoutAss>]'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_vector.h:564:   instantia
ted from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Class
WithoutAss, _Alloc = std::allocator<ClassWithoutAss>]'
main.cpp:13:   instantiated from here
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238: error: non-st
atic const member `const int ClassWithoutAss::mem', can't use default assignment
 operator
Run Code Online (Sandbox Code Playgroud)

在以下代码上运行g ++ main.cpp:

/*
 * ClassWithoutAss.h
 *
 */

#ifndef CLASSWITHOUTASS_H_
#define CLASSWITHOUTASS_H_

class ClassWithoutAss
{ …
Run Code Online (Sandbox Code Playgroud)

c++ g++ std stdvector dynamic-arrays

11
推荐指数
2
解决办法
6932
查看次数

当参数类型是Char的数组打开时,是否允许动态数组Char?

我在看Delphi:Char和TCharArray数组"不兼容的类型"并开始尝试.我发现的很有趣.

procedure Clear(AArray: array of Integer);
var
  I: Integer;
begin
  for I := Low(AArray) to High(AArray) do
    AArray[I] := 0;
end;

var
  MyArray: array of Integer;
begin
  Clear(MyArray);
end.
Run Code Online (Sandbox Code Playgroud)

这个简单的小例子展示了如何使用Open Array参数将动态数组传递给过程.它编译和运行完全符合预期.

procedure Clear(AArray: array of Char);
var
  I: Integer;
begin
  for I := Low(AArray) to High(AArray) do
    AArray[I] := #0;
end;

var
  MyArray: array of Char;
begin
  Clear(MyArray);
end.
Run Code Online (Sandbox Code Playgroud)

这是几乎完全相同的代码唯一的区别是它使用的是数组Char而不是Integer.它不编译.相反,编译器吐出:

 E2010 Incompatible types: 'Array' and 'Dynamic array'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

在搜索了一段时间后,我发现了这个 QC报告.我正在运行Delphi 2009,它仍然在发生.

delphi dynamic-arrays open-array-parameters

11
推荐指数
1
解决办法
2363
查看次数

使用new分配的数组是否可以使用初始化程序?

在我正在阅读的书中(Herbert Schildt的C++ Complete Reference),它表示没有使用分配的数组new可以有一个初始化器.

我不能使用new?初始化动态分配的数组?如果不是什么原因呢?

c++ dynamic-arrays

11
推荐指数
1
解决办法
4254
查看次数

php - 动态创建一个用N null元素初始化的数组

我想用N(不知道N)元素动态创建一个数组.

像功能一样的东西

public function create_array($num_elements){

     .....
}
Run Code Online (Sandbox Code Playgroud)

那回报我的东西

//call the function.... 
create_array(3);

//and the output is: 
array{
   0 => null
   1 => null
   2 => null
}
Run Code Online (Sandbox Code Playgroud)

我已经考虑过array_fill了一个简单的foreach循环.

还有其他解决方案吗?

php arrays dynamic-arrays

11
推荐指数
1
解决办法
2万
查看次数

为什么动态数组"构造函数"比SetLength和元素初始化慢得多?

我正在比较这两种初始化动态数组的方式之间的性能:

Arr := TArray<integer>.Create(1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)

SetLength(Arr, 5);
Arr[0] := 1;
Arr[1] := 2;
Arr[2] := 3;
Arr[3] := 4;
Arr[4] := 5;
Run Code Online (Sandbox Code Playgroud)

我准备了一个测试,我注意到使用数组"构造函数"需要两倍于另一个方法所需的时间.

测试:

uses
  DateUtils;

function CreateUsingSetLength() : TArray<integer>;
begin
  SetLength(Result, 5);
  Result[0] := 1;
  Result[1] := 2;
  Result[2] := 3;
  Result[3] := 4;
  Result[4] := 5;
end;
Run Code Online (Sandbox Code Playgroud)

...

const
  C_COUNT = 10000000;
var
  Start : TDateTime;
  i : integer;
  Arr : TArray<integer>;
  MS1 : integer;
  MS2 : integer;
begin
  Start := Now;
  i := …
Run Code Online (Sandbox Code Playgroud)

arrays delphi dynamic-arrays delphi-xe7

11
推荐指数
1
解决办法
432
查看次数

动态数组导致无效指针异常

我有一个将动态数组TData = TArray<Byte>作为参数的过程.

procedure DoStuff(const Input: TData);
begin
  // do nothing
end;
Run Code Online (Sandbox Code Playgroud)

还有一个返回动态数组的函数.

function SomeData: TData;
begin
  Result := [1, 2];
end;
Run Code Online (Sandbox Code Playgroud)

当我使用下面示例中的过程时,DoStuff获取以下数据(1,2,3,1,3),但在DoStuff完成后我得到一个EInvalidPointer异常.

procedure TForm1.Button1Click(Sender: TObject);
begin    
  DoStuff([1, 2, 3] + SomeData);
end;
Run Code Online (Sandbox Code Playgroud)

调用DoStuff([1, 2] + SomeData);不会导致错误,当数组大于4项时,它似乎变得敏感.如果我使用临时变量来保存数组,DoStuff仍会得到(1,2,3,1,2),但没有错误.

procedure TForm1.Button2Click(Sender: TObject);
var
  Temp: TData;
begin
  Temp := [1, 2, 3] + SomeData;

  DoStuff(Temp);
end;
Run Code Online (Sandbox Code Playgroud)

看起来像指针异常与其中一个动态数组超出范围时的释放有关.

我不应该以这种方式使用动态数组吗?工作时,这非常干净地解决了我当前的问题.

我也试过使用array of Byte;而不是TArray<Byte>;但有相同的结果.

完整的测试单位:

unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, …
Run Code Online (Sandbox Code Playgroud)

arrays delphi dynamic-arrays

11
推荐指数
1
解决办法
158
查看次数

如何在Fortran中即时增加数组大小?

我的程序正在运行,虽然3D阵列,标签"群",它发现,然后做一些检查,看看是否有临近簇具有比目前更高的集群的标签.还有第二个数组保存了"正确的"群集标签.如果它发现正确标记了第n个相邻簇,则将该元素分配给0,否则将其分配给正确的标签(例如,如果第n个站点具有标签2,并且邻居标记为3,则第3个元素为labelArray设置为2).老实说,我有充分的理由这样做!

我想要的只是能够分配动态的第n个元素labelArray.我已经看过可分配的数组并将事物声明为,labelArray(*)但我并不是真的理解这些,尽管在网上搜索和StackOverflow.

因此,任何帮助这样做都会很棒.

arrays fortran dynamic-arrays fortran90

10
推荐指数
2
解决办法
2万
查看次数