std::vector<bool> a (b, false); 在 C# 中
std::vector<bool> a (b, false); in 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);
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是"正常"向量)。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 伪造事实↔false
- QueryWorkingSet总是返回false
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何区分地图中的 0 和 false?
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- Arduino-C++ bool 不会从 false 变为 true
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 等于在 c++ 中返回 false
- strcmp 对于相等的字符序列返回 false
- std::is_class 在引用类上为 false
- ios_base::sync_with_stdio(false); cin.tie(NULL);
- C++ - 负数和正数之间的比较返回 false
- 如何使用boost定义布尔类,可能的值应该是TRUE或FALSE?
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- protobuf 的 ParseFromString 函数返回 false