在 C++ 中,我们可以使用填充来设置数组(和其他类似容器)的一系列值。
例如,
fill(number, number+n,10);
上面的代码将数组编号的前 n 个值设置为 10。
与此最接近的 C# 是什么。
在 C++ 中,我们可以使用填充来设置数组(和其他类似容器)的一系列值。
例如,
fill(number, number+n,10);
上面的代码将数组编号的前 n 个值设置为 10。
与此最接近的 C# 是什么。
我不确定是否存在,但您可以轻松编写自己的代码:
void Fill<T>(T[] array, int start, int count, T value)
{
for (int i = start, j = 0; j < count; i++, j++)
array[i] = value;
}
显然缺少参数检查,但你得到了练习。
没有等效的方法,但有很多方法可以编写类似的代码
Linq-to-Objects 类中的方法可以创建可用于初始化列表的序列,但这与 C++ 中实际发生的情况大不相同。
new List<char>(Enumerable.Repeat('A', 10));
new List<int>(Enumerable.Range(1, 10));
由于 C++ 模板的工作方式,C++ 可以更普遍地完成这些事情,虽然 C# 中的简单类型约束有所帮助,但它们并没有提供同样的灵活性。
没有直接的等价物,但您可以分两步完成。首先使用Enumerable.Repeat
在每个元素中创建一个具有相同值的数组。然后将其复制到目标数组:
var t = Enumerable.Repeat(value, count).ToArray();
Array.Copy(t, 0, dest, destStartIndex, count);
对于其他目标容器,缺少 的等价物Array.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;
}
}