标签: initialization

如何将List <T>初始化为给定大小(而不是容量)?

.NET提供了一个通用列表容器,其性能几乎相同(请参阅阵列性能与列表问题).但是它们在初始化方面完全不同.

使用默认值很容易初始化数组,根据定义,它们已经具有一定的大小:

string[] Ar = new string[10];
Run Code Online (Sandbox Code Playgroud)

这允许人们安全地分配随机项目,比如说:

Ar[5]="hello";
Run Code Online (Sandbox Code Playgroud)

列表事情更棘手.我可以看到两种方法进行相同的初始化,这两种方式都不是你所谓的优雅:

List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
Run Code Online (Sandbox Code Playgroud)

要么

string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Run Code Online (Sandbox Code Playgroud)

什么是更干净的方式?

编辑:到目前为止的答案是指容量,这不是预先填充列表.例如,在刚创建的容量为10的列表中,无法做到L[2]="somevalue"

编辑2:人们想知道为什么我想以这种方式使用列表,因为它不是他们打算使用的方式.我可以看到两个原因:

  1. 人们可以非常有说服力地认为列表是"下一代"阵列,增加灵活性几乎不会受到惩罚.因此,默认情况下应该使用它们.我指出它们可能不那么容易初始化.

  2. 我目前正在编写的是一个基类,它提供默认功能作为更大框架的一部分.在我提供的默认功能中,List的大小在高级中是已知的,因此我可以使用数组.但是,我想为任何基类提供动态扩展它的机会,因此我选择了一个列表.

.net c# generics initialization list

99
推荐指数
9
解决办法
17万
查看次数

在java中初始化一个布尔数组

我有这个代码

public static Boolean freq[] = new Boolean[Global.iParameter[2]];
freq[Global.iParameter[2]] = false;
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里到底出错了什么,我该怎么纠正呢?我只需要将所有数组元素初始化为Boolean false.谢谢

java arrays initialization

99
推荐指数
4
解决办法
34万
查看次数

如何在我声明的同一行中初始化C#List.(IEnumerable字符串Collection示例)

我正在写我的测试代码,我不想写写:

List<string> nameslist = new List<string>();
nameslist.Add("one");
nameslist.Add("two");
nameslist.Add("three");
Run Code Online (Sandbox Code Playgroud)

我很想写

List<string> nameslist = new List<string>({"one", "two", "three"});
Run Code Online (Sandbox Code Playgroud)

但是{"one","two","three"}不是"IEnumerable string Collection".如何使用IEnumerable字符串Collection在一行中初始化它?

c# collections initialization list

98
推荐指数
4
解决办法
12万
查看次数

如何使用Ruby一步初始化数组?

我这样初始化一个数组:

array = Array.new
array << '1' << '2' << '3'
Run Code Online (Sandbox Code Playgroud)

是否有可能一步到位?如果是这样,怎么样?

ruby arrays initialization

98
推荐指数
4
解决办法
15万
查看次数

如何在C++中初始化私有静态const映射?

我只需要字典或关联数组string=> int.

这种情况有类型映射C++.

但我只需要一个map forall实例( - > static),这个地图不能改变( - > const);

我用boost库找到了这种方式

 std::map<int, char> example = 
      boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c');
Run Code Online (Sandbox Code Playgroud)

没有这个lib还有其他解决方案吗?我尝试过类似的东西,但是地图初始化总是存在一些问题.

class myClass{
private:
    static map<int,int> create_map()
        {
          map<int,int> m;
          m[1] = 2;
          m[3] = 4;
          m[5] = 6;
          return m;
        }
    static map<int,int> myMap =  create_map();

};
Run Code Online (Sandbox Code Playgroud)

c++ static initialization const map

97
推荐指数
6
解决办法
13万
查看次数

为什么局部变量没有在Java中初始化?

有没有理由为什么Java的设计者觉得局部变量不应该被赋予默认值?说真的,如果实例变量可以给出一个默认值,为什么我们不能对局部变量做同样的事情呢?

它也会导致问题,如本评论中对博客文章的解释:

这个规则在尝试关闭finally块中的资源时最令人沮丧.如果我在try中实例化资源,但尝试在finally中关闭它,我会收到此错误.如果我在try之外移动实例化,我会收到另一个错误,指出它必须在try中.

很沮丧.

java variables initialization

96
推荐指数
7
解决办法
7万
查看次数

BOOL的默认值

BOOLObjective-C中变量的默认值是多少?

boolean initialization objective-c

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

什么是初始化块?

我们可以将代码放在构造函数或方法或初始化块中.初始化块有什么用?每个java程序都必须拥有它吗?

java constructor initialization initialization-block

93
推荐指数
3
解决办法
6万
查看次数

在Java交换机中声明和初始化变量

我有一个关于Java交换机的疯狂问题.

int key = 2;

switch (key) {
    case 1:
        int value = 1;
        break;
    case 2:
        value = 2;
        System.out.println(value);
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

场景1 - 当它key为2时,它成功地将值打印为2.
场景2 - 当我要在其中发表评论value = 2case 2:,说出该局部变量值可能尚未初始化.

问题:

场景1:如果执行流程没有进入case 1:(当时key = 2),那么它如何知道值变量的类型为int

场景2:如果编译器知道值变量的类型int,则必须访问.中的int value = 1;表达式case 1:.(声明和初始化).那么为什么sqawrk当我要评论value = 2case 2:,说本地变量值可能没有被初始化.

java scope initialization declaration switch-statement

92
推荐指数
4
解决办法
1万
查看次数

为什么定义数组之外的第一个元素默认为零?

我正在准备 C++ 入门课程的期末考试。我们的教授给了我们这个问题来练习:

解释为什么代码会产生以下输出:120 200 16 0

using namespace std;
int main()
{
  int x[] = {120, 200, 16};
  for (int i = 0; i < 4; i++)
    cout << x[i] << " ";
}
Run Code Online (Sandbox Code Playgroud)

该问题的示例答案是:

cout 语句只是循环遍历其下标由 for 循环的增量定义的数组元素。元素大小不是由数组初始化定义的。for 循环定义了数组的大小,该大小恰好超出了初始化元素的数量,因此最后一个元素默认为零。第一个 for 循环打印元素 0 (120),第二个循环打印元素 1 (200),第三个循环打印元素 2 (16),第四个循环打印默认数组值零,因为元素 3 没有任何初始化。现在 i 点超出了条件并且 for 循环终止。

我有点困惑为什么数组之外的最后一个元素总是“默认”为零。为了进行实验,我将问题中的代码粘贴到我的 IDE 中,但将 for 循环更改为for (int i = 0; i < 8; i++). 然后输出更改为120 200 16 0 4196320 0 …

c++ arrays initialization undefined-behavior zero-initialization

92
推荐指数
5
解决办法
6656
查看次数