std::vector<bool> a (b, false); 在 C# 中

std::vector<bool> a (b, false); in c#

本文关键字:false lt vector bool gt std      更新时间:2023-10-16

有人能帮我理解以下代码的含义以及它如何翻译成C#吗?

unsigned int b = 100;
std::vector<bool> a (b, false);

如果是这样的话:

vector<bool> a;

我可能会去:

List<bool> a;

这是正确的吗?

但我不知道c++,所以我不明白uint和bool是如何传递给bool类型的向量的?也许应该是这样的?

MyGenericList<int, bool> a = new MyGenericList<int, bool>(b, false);

std::vector<bool>是特殊的,它在C++中被实现为位数组。换句话说,1个字节存储向量的8个元素,这是创建布尔数组的最精简的方法。这在.NET中也可用,完全等效的声明是:

    int b = 100;
    System.Collections.BitArray a = new System.Collections.BitArray(b);

如果这个数组只包含100个元素,那么,meh,就不用麻烦了。如果它将包含一百万,那么,是的,麻烦你了。

正如其他答案所说,C++代码创建了一个类似数组或列表的东西,其中包含100个元素,全部为false。C#中的等价物是:

var a = new bool[100];

或者,如果您不需要固定大小:

var a = new List<bool>(100);
// or, if the initial capacity isn't important
var a = new List<bool>();

由于默认的bool值是false,因此不需要在任何位置显式指定它。如果你想要true(或者,例如,在int的列表中,默认为-1),你必须在创建它之后循环它:

var a = new bool[100];
for (var i = 0; i < a.Length; i++)
    a[i] = true;

std::vector<bool> a (b, false);创建一个100布尔长的向量(一个数组或一种C#列表),并将这些bool初始化为false。

注意:不要使用std::vector<bool>

第一个参数是向量的大小,而第二个参数是它的元素(请参阅handly C++引用)。所以

std::vector<bool> a(100, false);

创建100个元素的矢量,其中元素为false

正如Scarlet所指出的,std::vector<bool>是"奇怪的"(它没有完整的C++容器接口。我不会说"不要使用它",但重要的是要知道它可能表现得很奇怪——上面的ling是"正常"向量)。