Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是C#与C++;STL填充法 C++中,我们可以使用填充.< /P>设置数组(和其他类似容器)的值范围。_C#_C++_Arrays_Fill_Equivalent - Fatal编程技术网

什么是C#与C++;STL填充法 C++中,我们可以使用填充.< /P>设置数组(和其他类似容器)的值范围。

什么是C#与C++;STL填充法 C++中,我们可以使用填充.< /P>设置数组(和其他类似容器)的值范围。,c#,c++,arrays,fill,equivalent,C#,C++,Arrays,Fill,Equivalent,比如说, fill(number, number+n,10); 上面的代码将数组编号的前n个值设置为10 与此最接近的C#等价物是什么。没有等价的方法,但有许多方法可以编写类似的代码 从LINQ到对象类的方法可以创建可以用来初始化列表的序列,但这与C++实际发生的情况非常不同。 new List<char>(Enumerable.Repeat('A', 10)); new List<int>(Enumerable.Range(1, 10)); 新列表(可枚举。重复('

比如说,

fill(number, number+n,10);
上面的代码将数组编号的前n个值设置为10


与此最接近的C#等价物是什么。

没有等价的方法,但有许多方法可以编写类似的代码

从LINQ到对象类的方法可以创建可以用来初始化列表的序列,但这与C++实际发生的情况非常不同。

new List<char>(Enumerable.Repeat('A', 10));
new List<int>(Enumerable.Range(1, 10));
新列表(可枚举。重复('A',10));
新列表(可枚举范围(1,10));

<> C++可以通过C++模板的工作来更一般地完成这些事情,而C语言中简单的类型约束则没有提供相同的灵活性。

没有直接的等价物,但可以分两步来完成。首先使用

可枚举。重复
以在每个元素中创建具有相同值的数组。然后将其复制到目标阵列上:

var t = Enumerable.Repeat(value, count).ToArray();
Array.Copy(t, 0, dest, destStartIndex, count);
对于其他目标容器,缺少与
数组.Copy
等效的容器,但很容易将其添加为目标,例如:

static void Overwrite<T>(this List<T> dest, IEnumerable<T> source, int destOffset) {
  int pos = destOffset;
  foreach (var val in source) {
    // Could treat this as an error, or have explicit count
    if (pos = dest.Length) { return; }

    dest[pos++] = val;
  }
}
静态无效覆盖(此列表dest、IEnumerable source、int destOffset){
int pos=偏移量;
foreach(源中的var val){
//可以将此视为错误,或具有显式计数
如果(pos=dest.Length){return;}
dest[pos++]=val;
}
}

我不确定是否存在,但您可以轻松编写自己的代码:

void Fill<T>(T[] array, int start, int count, T value)
{
  for (int i = start, j = 0; j < count; i++, j++)
    array[i] = value;
}
void Fill(T[]数组,int start,int count,T值)
{
对于(int i=start,j=0;j

显然缺少参数检查,但你得到了训练。

为什么不对
Repeat
的结果使用
ToList
,从而避免需要显式指定列表类型?@Richard我不明白为什么不,有很多方法可以构造列表,我非常喜欢类型推断,但在这个例子中使用了构造函数。如果你需要的话,可能应该只做一个
Fill
扩展方法。这是相当昂贵的(即使这是一个更普遍的问题解决方案)。此外,如果我们将参数
List dest
更改为
IList dest
,它应该可以在数组和列表上工作。