2013-12-09 146 views
0

有人可以幫我理解下面的代碼是什麼意思,它是如何轉化爲C#?std :: vector <bool> a(b,false);在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); 

回答

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; 
0

std::vector<bool> a (b, false);創建向量(C#列表的陣列或種類),其是100級的bool長並初始化這些bool s到假。

A注意:做不是使用std::vector<bool>

+0

你能否詳細說明爲什麼不使用std :: vector ? – Jimmy

+0

@Jimmy,由於空間效率的原因,它的工作方式與其他類型不同。 – chris

+0

@Jimmy因爲名稱矢量對它的作用沒有意義:) – ScarletAmaranth

0

第一個參數是矢量的大小,而第二個是它的元素(請參閱handly C++ reference)。所以

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

創建100個元素的向量,其元素是false

正如Scarlet std::vector<bool>指出的那樣「很奇怪」(它沒有完整的C++容器接口,我不會說'不要使用它',但知道它可能會表現很奇怪是很重要的 - 上面的ling是'正常'向量)。

3

std::vector<bool>是特殊的,它是作爲一個bit array in C++。換句話說,1個字節存儲8個向量元素,這是創建一個bool數組的最可能的方式。這在.NET中也是可用的,確切的等效聲明是:

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

如果這個數組只包含100個元素,那麼,meh,不要打擾。如果它將包含一百萬,那麼,是麻煩的。

相關問題