배열에 몇 개의 값이 있는지 찾는 방법이 있습니까? 배열의 끝에 도달했는지 여부를 감지하는 것도 효과가 있습니다.
답변
C 스타일 배열을 의미한다면 다음과 같이 할 수 있습니다.
int a[7];
std::cout << "Length of array = " << (sizeof(a)/sizeof(*a)) << std::endl;
이것은 포인터에서 작동하지 않습니다 (즉 , 다음 중 하나 에서는 작동 하지 않습니다 ).
int *p = new int[7];
std::cout << "Length of array = " << (sizeof(p)/sizeof(*p)) << std::endl;
또는:
void func(int *p)
{
std::cout << "Length of array = " << (sizeof(p)/sizeof(*p)) << std::endl;
}
int a[7];
func(a);
C ++에서 이런 종류의 동작을 원하면 컨테이너 클래스를 사용해야합니다. 아마 std::vector
.
답변
다른 사람이 말했듯이 사용할 수는 sizeof(arr)/sizeof(*arr)
있지만 배열이 아닌 포인터 유형에 대한 잘못된 대답을 제공합니다.
template<class T, size_t N>
constexpr size_t size(T (&)[N]) { return N; }
이것은 비 배열 유형에 대한 컴파일 실패의 좋은 속성을 가지고 있습니다 (시각적 스튜디오는 _countof
이것을 수행합니다). 는 constexpr
그것이 (이상 없음에서 내가 아는) 매크로를 통해 어떤 결점이없는, 그래서이 컴파일 시간 표현한다.
std::array
네이티브 C 배열보다 오버 헤드없이 길이를 노출시키는 C ++ 11에서 사용 하는 것도 고려할 수 있습니다 .
C ++ 17 은std::size()
에 <iterator>
동일한을 수행하고 너무 STL 컨테이너 (덕분에 작동 헤더 @ 존 C ).
답변
그렇게하면 sizeof( myArray )
해당 배열에 할당 된 총 바이트 수를 얻을 수 있습니다. 그런 다음 배열에서 한 요소의 크기로 나누어 배열의 요소 수를 찾을 수 있습니다.sizeof( myArray[0] )
답변
이것은 오래된 질문이지만 C ++ 17에 대한 답변을 업데이트하는 것이 좋습니다. 표준 라이브러리에는 std::size()
std 컨테이너 또는 C 스타일 배열의 요소 수를 반환 하는 템플릿 함수가 있습니다 . 예를 들면 다음과 같습니다.
#include <iterator>
uint32_t data[] = {10, 20, 30, 40};
auto dataSize = std::size(data);
// dataSize == 4
답변
배열에 몇 개의 값이 있는지 찾는 방법이 있습니까?
예!
시험 sizeof(array)/sizeof(array[0])
배열의 끝에 도달했는지 여부를 감지하는 것도 효과가 있습니다.
배열이 문자 배열 (예 : 문자열)이 아니면이 방법을 보지 못합니다.
추신 : C ++에서는 항상 사용하십시오 std::vector
. 몇 가지 내장 기능과 확장 기능이 있습니다.
답변
std::vector
방법이있다 size()
벡터의 요소 수를 반환 가 있습니다.
(예, 이건 혀로 답입니다)
답변
#include <iostream>
int main ()
{
using namespace std;
int arr[] = {2, 7, 1, 111};
auto array_length = end(arr) - begin(arr);
cout << "Length of array: " << array_length << endl;
}