2014-10-17 4 views
1
int size=50000; 
int arr[50000]; //valid 
int arr[size]; //valid 
int arr[50000]={0}; //valid 
int arr[size]={0}; //error 

가변 크기 (크기)의 배열을 만들고 for 루프를 사용하지 않고 배열의 모든 요소를 ​​0으로 설정하고 싶습니다. 무언가의 속도를 테스트하고 for 루프 같은 것을 피할 필요가 있습니다.가변 크기의 정적 배열을 0으로 채우는 방법

내가 할 수있는 방법이 있습니까?

+7

C++은 가변 길이 배열을 지원하지 않습니다. – juanchopanza

+0

즉, C++에서 요구하는 것을 수행 할 수 없습니다. – juanchopanza

+0

C 태그를 제거하기 위해 롤백했지만 C에 대해 알고 싶다면 질문에 태그를 추가하고 태그를 추가해야합니다. – juanchopanza

답변

4

당신은 C++ 표준에는 VLA가 없음을 고려 예를

#include <string.h> 

//... 

int size=50000; 
int arr[size]; 

memset(arr, 0, size * sizeof(int)); 

가지고 들어 C.

에서 C++에서 또는 <string.h>에서 헤더 <cstring>에 선언 C 표준 기능 memset를 사용해야합니다. 이것은 일부 개발자의 C++ 언어 확장 일 수 있습니다.

+0

memset에 시간이 걸립니까? 또는 int arr [50000] = {0}만큼 빠릅니다. 그럴거야? – user3507072

+0

@ user3507072 사실 컴파일러는 내부적으로 memset을 int arr [50000] = {0}과 같은 정의로 사용합니다. 그래서 이니셜 라이저 목록을 가진 배열을 정의하는 것과 같은 시간이 걸립니다. –

3
std::vector<int> arr(size, 0); 

C++의 vector은 가변 크기의 배열처럼 작동하는 데이터 구조입니다. 위에 표시된 것처럼 생성자 중 하나는 모든 요소를 ​​채울 값과 함께 크기를 지정할 수 있습니다.

관련 문제