2012-02-09 27 views
5
void *memset(void *dest, int c, size_t count) 

Đối số thứ ba là Số ký tự hoặc byte trong mảng. Làm thế nào bạn sẽ nhớ một mảng các boolean, nói bool bArray [11]?Làm thế nào để ghi nhớ một mảng bools?

MSDN nói: "Lưu ý bảo mật - Đảm bảo rằng bộ đệm đích có đủ chỗ cho ít nhất số ký tự".

+2

'bool bArray [11] = {} '? Hoặc 'std :: fill (bắt đầu (bArray), kết thúc (bArray), true)'? –

+0

'11 * sizeof (bool)'. Điều đó đang được nói, đó không phải là rất c + +; bạn nên sử dụng 'std :: fill()' –

+1

Có vẻ như vector được tối ưu hóa cho phân bổ không gian và là mảng bit thực sự. Một mảng kiểu mảng C++ của bools về bản chất là một mảng các byte với tất cả các bit là 0 hoặc 1. Vector là cách để thực hiện. Cảm ơn vì tất cả những phản hồi. Nhiều đánh giá cao. – user173438

Trả lời

16

std::fill() nên sử dụng memset() khi có thể.

std::fill(std::begin(bArray), std::end(bArray), value); 
+3

Nếu anh ta nhận được bArray thông qua một con trỏ, làm thế nào bạn có thể nhận được 'std :: end (bArray)'? – einpoklum

+1

@einpoklum Nếu 'bArray' là một con trỏ, dòng này phải là' std :: fill (bArray, bArray + arraySize, value); ' – MewX

+2

@MewX: Rõ ràng, nhưng đó không phải là câu trả lời này nói ngay bây giờ. – einpoklum

4
memset(buffer_start, value, sizeof(bool) * number_of_bools); 
+0

'sizeof (bool)' làm cho cảm giác ít có - memset chỉ điền vào mỗi byte với một bool. – Blaisorblade

+5

@blaisorblade Có sizeof (bool) == 1, nhưng nêu rõ ý định của bạn trong mã không bao giờ là một điều xấu. – Gigi

+5

Kích thước của bool có thể không phải là 1. –

0

Để thiết lập mảng của 11 yếu tố bool để ví dụ đúng bằng cách sử dụng memset:

const int N = 11; 
bool arr[N]; 
memset(&arr, 1, sizeof(bool) * N); 
+4

Nó phải được ghi nhớ (arr, 1, sizeof (bool) * N); – miloszmaki

0
//Array declaration 
bool arr[10]; 

//To initialize all the elements to true 

memset(arr,1,sizeof(arr)); 

Tương tự, bạn có thể khởi tạo tất cả các yếu tố để sai, bằng cách thay thế 1 với 0.

Các vấn đề liên quan