爲什麼在我們有向量時使用這樣的新內存位置?
有沒有優勢?使用new分配連續空間與使用矢量?
bool* arr = new bool(size);
我不清楚這條線做什麼,但我的感覺是 這std::memset
套無論param2
給出了從地址開始的所有 位置在param1
,並在給定的大小
std::memset(arr, 0, sizeof(bool) * (num+1));
爲什麼在我們有向量時使用這樣的新內存位置?
有沒有優勢?使用new分配連續空間與使用矢量?
bool* arr = new bool(size);
我不清楚這條線做什麼,但我的感覺是 這std::memset
套無論param2
給出了從地址開始的所有 位置在param1
,並在給定的大小
std::memset(arr, 0, sizeof(bool) * (num+1));
什麼這行
bool* arr = new bool(size);
做ES?
此行分配在堆的布爾和它其初始化爲true
如果size != 0
並false
如果size == 0
。然後它將新分配的布爾值的地址分配給布爾指針arr
。所以沒有陣列在這裏玩。
我怎麼能分配一個布爾型數組
new
?
在堆中分配數組的正確方法是使用運算符new[]
。這是你的情況:
bool* arr = new bool[size];
隨着智能指針的出現,你也可以使用std::unique_ptr
:
std::unique_ptr<bool[]> arr(new bool[size]);
這樣,你就不必delete []
之後。
爲什麼在我們有向量時使用這種新的內存分配?
好與任何其他類型的除了bool
我會同意,但事情是,有與std::vector<bool>
某些問題。
std::vector<bool>
是專門爲std::vector<T>
,這主要是爲了空間效率(可辯論)完成。
但是,它的行爲類似但不同於普通的std::vector<T>
。這主要歸因於以下事實:std::vector<bool>
不是通常STL意義上的容器,而是一組位。 Generaly,使用std::vector<bool>
可引起許多havocs它被認爲是一個不成熟的優化,它甚至可以pessimize你的表現(查看更多詳情here)。
另一件事是,在嵌入式系統,其空間是crusial,使用原始陣列,而不是一個矢量在空間效率方面更好的選擇。
std::memset(arr, 0, sizeof(bool) * (size));
怎麼樣?
std::memset
初始化一定數量在存儲器與給定的值(即,第二輸入參數)從地址arr
(即,第一個輸入參數)開始的字節(即,第三輸入參數)的。在上面的示例中,它將填充arr
和0
s,最大爲size
字節數。也就是說,如果arr
是一個大小爲size
的數組,它將初始化此布爾數組的所有元素爲false
。
但是alternatevely,您可以使用以下方案:
bool* arr = new bool[size]();
^^
或
std::unique_ptr<bool[]> arr(new bool[size]());
,從而避免給原始內存操縱通話落在慎用類使用std::memset
。
哇,您的回答很酷,但不能upvote:p我沒有足夠的積分。採取的要點:1.新的布爾(大小)< - 大小變量這裏是誤導,這只是用來創建一個單一的內存實例t/f。 2.這個alg的作者直接通過分配零的做事來清除以下內存空間,但是我認爲它是堆的剩餘內存,他/她沒有打擾,堆棧內存將會是災難。 3.必須使用智能指針來創建這樣的東西。 –
upvoted,剛剛收到upvoting的能力! –
爲什麼當我們有向量時使用這樣的新內存位置?
我們不能讚揚作者在這裏使用新的原因。慣用的方法是使用一個std::vector<bool>
有沒有什麼優勢?
通常不是,但特別是std::vector<bool>
是有問題的,因爲有一個專門化,不像其他類型一樣工作。
有很多這樣的問題,在這樣:
我不明白這行做,但我的感覺...
你膽量是對的。
注:與new
分配的bool
個連續的數組中的代碼將
bool* arr = new bool[size];
代替原始指針,你可以使用智能指針來分配數組,不需要關心delete []
:
std::unique_ptr<bool[]> arr{new bool[size]};
如果size是已知的,'std :: array'會更好嗎? –
@EdHeal很可能是的。 –
是完全正確author'd使用數組如果大小已知,但在我正在研究的算法https://gist.github.com/anonymous/524357a70fc95b537f31f5d7ec3e8bb8#file-sieve-cpp-L12數組的大小由用戶的輸入決定。僅供參考,鏈接是我輸入的整個實際文件的一部分 –
您的標題和內容不符,請說明您要做什麼。 –
bool * arr = new bool(size);不是一個數組。 – basslo
真的很抱歉我是新來的C++編程,是bool * arr = new bool(size);不創建contiguos空間? –