태그 보관물: arrays

arrays

배열의 길이를 어떻게 찾습니까? 찾는 방법이 있습니까? 배열의 끝에 도달했는지

배열에 몇 개의 값이 있는지 찾는 방법이 있습니까? 배열의 끝에 도달했는지 여부를 감지하는 것도 효과가 있습니다.



답변

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 ++ 17std::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;
}