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

时间:2013-12-09 18:46:05

标签: c# c++

有人可以帮助我理解以下代码的含义以及它如何转换为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);

4 个答案:

答案 0 :(得分:3)

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

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

如果这个数组只包含100个元素,那么,不要打扰。如果它将包含一百万,那么,是的,请打扰。

答案 1 :(得分:2)

正如other answers所说,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;

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

第一个参数是vector的大小,而second是它的元素(参见handly C++ reference)。所以

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

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

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