有人可以帮助我理解以下代码的含义以及它如何转换为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);
答案 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 ++容器界面。我不会说'不要使用它',但知道它很重要可能表现得很奇怪 - 上面的语言是'正常'向量)。