标签: static-array

有静态数组有什么意义呢

我没有C或C++的背景,所以静态数组让我有点困惑.它们适用于什么?为什么他们分配在堆栈上?

我想有一个性能优势.堆栈分配更快,不需要垃圾回收.但为什么在编译时需要知道长度?难道你不能在运行时创建一个固定大小的数组并在堆栈上分配它?

D中的动态数组或切片由包含指针和长度属性的结构表示.静态数组是一样的吗?他们是如何代表的?

如果将它们传递给函数,它们将被完整复制(除非你使用ref),这背后的基本原理是什么?

我意识到动态数组和切片在D中比静态数组更加重要,这就是为什么文档没有详细讨论它们,但我仍然希望有更多的背景知识.我想静态数组的特性与堆栈分配的工作方式有关.

d static-array

4
推荐指数
2
解决办法
392
查看次数

如何使用硬编码值声明自定义数据类型的静态数组?

目标:

我想为不经常更改的数据实现硬编码查找表,但是当它确实发生更改时,我希望能够快速更新程序并重建.

计划:

我的计划是定义一个自定义数据类型...

private class ScalingData
{
    public float mAmount;
    public String mPurpose;
    public int mPriority;

    ScalingData(float fAmount, String strPurpose, int iPriority)
    {
        mAmount = fAmount;
        mPurpose = strPurpose;
        mPriority = iPriority;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在主类中,像这样对数组进行硬编码......

public static ScalingData[] ScalingDataArray =
{
        {1.01f, "Data point 1", 1},
        {1.55f, "Data point 2", 2}
};
Run Code Online (Sandbox Code Playgroud)

但是,这不构建.我一直看到消息" Type mismatch: cannot convert from float[] to ScalingData".

我怎样才能实现目标?

UPDATE

到目前为止,我已尝试实施这些建议,但仍然遇到错误......

代码如下:

public class CustomConverter
{
    //Lookup Table
    private static ScalingData[] ScalingDataArray =
    {
        new …
Run Code Online (Sandbox Code Playgroud)

java static-array

3
推荐指数
1
解决办法
2666
查看次数

使用#define来定义静态数组的大小是否合法?

我正在开发的系统中有很多类,在这些类中,我有一个关于某些东西的"名称"的数组.名称最多30个字符.

最初我只使用了10个字符,但现在我需要增加限制.增加限制需要时间,因为我在很多地方使用这种数组.如果我使用#define NAME_SIZE 30或类似的东西会更容易,然后我所要做的就是改变一个数而不是大约二十个.

但是我不确定这是否是C++中的"合法"事情.

这将节省我未来的大量时间,这就是我要问的原因.

c++ dynamic static-array c-preprocessor

3
推荐指数
1
解决办法
452
查看次数

如何在Delphi中公开私有静态数组字段的内置枚举器?

我试图在TEnumerator中公开构建私有静态数组.

Delphi本身允许直接枚举静态数组(见下文),所以我怀疑Delphi在后台为静态数组创建一个枚举器,我希望我能够在GetEnumerator方法中创建和公开相同的枚举器.

(我使用的是Delphi XE2).

program Project6;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Generics.Collections;

type
  TMyEnum = (meA, meB);

  TMyClass = class
  private
    FItems: array[TMyEnum] of Integer;
  protected
  public
    function GetEnumerator: TEnumerator<Integer>;
  end;

{ TMyClass }

function TMyClass.GetEnumerator: TEnumerator<Integer>;
begin
  // What is the simplies way of creating this enumerator?
end;

var
  myObj: TMyClass;
  i: Integer;

begin
  myObj := TMyClass.Create;
  try
    // This works but only in the same unit
    for i in myObj.FItems do
      WriteLn(i);

    for i in myObj do …
Run Code Online (Sandbox Code Playgroud)

arrays delphi enumerator static-array delphi-xe2

3
推荐指数
1
解决办法
443
查看次数

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

C++ /是否允许更改静态数组的大小?

根据C++静态数组与动态数组的正确答案,静态数组具有固定的大小.

但是,这个编译并运行得很好:

int main(int argc, char** argv) {

int myArray[2];

myArray[0] = 0;
myArray[1] = 1;

cout<<myArray[0]<<endl;
cout<<myArray[1]<<endl;

myArray[4];

myArray[2] = 2;
myArray[3] = 3;

cout<<myArray[2]<<endl;
cout<<myArray[3]<<endl;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着可以调整静态数组的大小?

c++ arrays static-array

2
推荐指数
3
解决办法
236
查看次数

如何在声明中初始化delphi静态数组的特定条目?

我有一个枚举的全局数组变量'a'..'z'.如果我想在变量声明中初始化一些条目,我通常会执行以下操作:

var 
  Example: Array['a'..'z'] of String = ('Example one', 'two', 'three');
Run Code Online (Sandbox Code Playgroud)

有没有办法在变量声明中初始化,例如'g','p','o'和'y',或者我必须通过实现部分中的某个函数/过程来执行此操作?

有没有更聪明的方法来实现我想要的?

arrays delphi static-array

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

接受任何大小的静态数组的函数(D)

如何创建支持任何大小的静态数组的函数?

就像是:

@safe pure nothrow void fillArray(ref ubyte[] array) {
    /**
     * How do I make this function support arrays of any
     * size; but they don't have to be dynamic?
    **/
}
Run Code Online (Sandbox Code Playgroud)

arrays d dynamic-arrays static-array

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

展开的静态数组循环

如果我调用该函数

/** Check if all Elements, possibly recursively, of $(D x) are zero. */
bool allZero(T)(in T x) @safe pure nothrow {
    import std.range: isIterable;
    static if (isIterable!T) {
        foreach (ref elt; x) {
            if (!elt.allZero) { return false; }
        }
        return true;
    } else {
        return x == 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用静态数组,D会foreach在发布模式下自动为我展开吗?

如果不能

/** Static Iota. */
import std.typetuple: TypeTuple;
template siota(size_t from, size_t to) { alias siotaImpl!(to-1, from) siota; }
private template siotaImpl(size_t to, size_t now) …
Run Code Online (Sandbox Code Playgroud)

static d static-array iota loop-unrolling

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

在C++中初始化类的静态数组成员的更好方法(虽然const是首选)

我有一个指向函数的静态数组指针作为类的成员.

我需要对它进行初始化,但事实证明这个数组的长度是64K项,因此使用静态初始化器初始化它是不切实际的,就像{ x, y, z, ... }它会使代码混乱一样.

我反而用代码初始化它,有几个循环.

我想要这样做的方法是static在构造函数中初始化数组并为其设置一个标志,因此只有该类的第一个实例的构造才会触发此初始化.

从实例中访问这个静态标志也不是线程安全的,但这是另一个故事.

有更干净或更好的方法吗?

我也想要这个数组const,但我担心唯一的方法就是static {}初始化,对吗?

c++ static-initializer static-initialization static-array

0
推荐指数
1
解决办法
328
查看次数

创建一个char数组,其大小由参数-C++给出

我有一个带有静态char数组的类.数组的大小是给我的argv.

我想做这样的事情:

class ABC {

public:
  static char *buffer;
  ABC(int size) {
    ABC::buffer = new char[size];
  }

}

// in other file:

ABC tempVar(atoi(argv[1]));
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.我得到的错误如下:

错误2错误LNK2001:解析外部符号:(?缓冲@ ABC @@ 2PADA) "公共静态字符*ABC ::缓冲区" gpslib.lib

我怎样才能解决这个问题?

c++ static-array

0
推荐指数
1
解决办法
358
查看次数

sizeof静态数组成员返回指针的大小而不是数组

所以我有一个C++结构,它有一个静态数组作为成员,我想在构造函数中询问它的大小.正如我从本文http://msdn.microsoft.com/en-us/library/4s7x1k91(VS.71).aspx所理解的那样,sizeof可以应用于静态数组以查找整个大小(以字节为单位)数组,而不仅仅是它的类型.但是,当我sizeof()对成员执行时,它给出了4(指针的大小)而不是数组的大小.这是上下文(平凡的):

struct A
{
    char descirption[128];
    int value;

    A(const char desc[], int val)
    {
        size_t charsToCopy = std::min(sizeof(description), sizeof(desc));
        memcpy(description, desc, charsToCopy);
        value = val;
    }
}

int main()
{
    A instance("A description string", 1);
    //now instance has a description string that says "A des" followed by garbage characters
}
Run Code Online (Sandbox Code Playgroud)

那么我如何获得成员char数组的大小?

编辑

当我在编译器中放置一个断点并检查这两个值时sizeof(description),sizeof(desc)我看到了sizeof(description) == 4,和sizeof(desc) == 21.因此我的困惑.因为我正在将一个字符串文字传递给构造函数,所以编译器似乎很高兴告诉我传入的字符串的实际大小.如果我将它分配给某个地方的某个变量,可能就不会这样了,但是现在我我试图追查根本问题:sizeof(some-member-static-array)给了我一些(相对)毫无意义的东西.

sizeof是否可能正在进行某种字符串长度测量,因为它是一组字符?

c++ arrays sizeof static-array

0
推荐指数
1
解决办法
1267
查看次数