배열

Jaemyeong Lee·2024년 8월 4일
0

FastCampusC++

목록 보기
21/78

첫 번째 블록 (배열 선언 및 인덱싱)

{
    // bool이 31개 있는 배열
    bool attendanceBook[31];
    // bool, bool, bool ... bool (*31)

    attendanceBook[0];  // 배열의 맨 앞 값 (0)
    attendanceBook[30]; // 배열의 맨 뒤 값 (SIZE - 1)

    attendanceBook[-1]; // 정의 되지 않은 행동, 음수 (컴파일 됨)
    attendanceBook[31]; // 정의 되지 않은 행동, 사이즈 초과 (컴파일 됨)
}
  1. attendanceBook 배열을 bool 타입의 31개 원소로 선언합니다.
  2. attendanceBook[0]은 배열의 첫 번째 요소를 참조합니다.
  3. attendanceBook[30]은 배열의 마지막 요소를 참조합니다.
  4. attendanceBook[-1]attendanceBook[31]은 유효하지 않은 인덱스 접근으로, 정의되지 않은 동작을 일으킵니다. 컴파일은 되지만 런타임 오류가 발생할 수 있습니다.

두 번째 블록 (변수로 배열 크기 지정 불가)

{
    int arraySize;
    cin >> arraySize;

    // 변수로 배열 사이즈를 지정할 수 없다
    //  bool attedanceBook[arraySize]; 
}
  1. arraySize를 입력받습니다.
  2. 배열 크기를 변수로 지정하는 것은 허용되지 않습니다. 컴파일 타임에 배열의 크기가 결정되어야 하기 때문입니다.

세 번째 블록 (상수를 이용한 배열 크기 지정)

{
    // 상수를 이용한 배열 사이즈
    const int arraySize = 31;
    bool attendanceBook[arraySize];

    // 상수는 바꿀 수 없다.
    //arraySize = 1;
}
  1. const int arraySize를 31로 초기화합니다.
  2. attendanceBook 배열을 arraySize 크기로 선언합니다.
  3. const로 선언된 상수는 변경할 수 없습니다.

네 번째 블록 (매크로를 이용한 배열 크기 지정)

{
    // 매크로를 이용한 배열 사이즈
#define ARRAY_SIZE 31
    bool attendanceBook[ARRAY_SIZE];
}
  1. 매크로 ARRAY_SIZE를 31로 정의합니다.
  2. attendanceBook 배열을 ARRAY_SIZE 크기로 선언합니다.

다섯 번째 블록 (초기화되지 않은 배열)

{
    int nums[3];
    cout << nums[0] << endl; // 초기화가 안 돼서 쓰레기 값이 나온다.
}
  1. nums 배열을 3개의 int 원소로 선언합니다.
  2. 배열이 초기화되지 않았기 때문에 nums[0]의 값은 쓰레기 값입니다.

여섯 번째 블록 (배열의 값 설정)

{
    // 배열의 값 설정
    int nums[3];
    nums[0] = 10;
    nums[1] = 10;
    nums[2] = 10;
}
  1. nums 배열을 3개의 int 원소로 선언합니다.
  2. 각 요소에 값을 설정합니다.

일곱 번째 블록 (초기화 리스트)

{
    // 초기화 리스트
    int nums[3] = { 1, 2, 3 };
}
  1. nums 배열을 3개의 int 원소로 선언하고 초기화 리스트를 사용하여 값을 설정합니다.

여덟 번째 블록 (부분 초기화)

{
    int nums[3] = { 1 }; // 1 이후로는 0으로 채워진다.
}
  1. nums 배열을 3개의 int 원소로 선언하고 첫 번째 요소만 1로 초기화합니다.
  2. 나머지 요소는 0으로 초기화됩니다.

아홉 번째 블록 (배열 크기 자동 결정 및 크기 계산)

{
    int nums[]{ 1, 2 }; // 사이즈 명시 하지 않으면 초기화 시 넣어준 원소의 개수 배열

    // 배열 자체의 사이즈
    cout << sizeof(nums) << endl;

    // 배열 원소의 개수
    cout << sizeof(nums) / sizeof(int) << endl;
}
  1. nums 배열을 초기화 리스트로 선언하고 크기를 자동으로 결정합니다.
  2. sizeof(nums)를 사용하여 배열의 전체 크기를 바이트 단위로 출력합니다.
  3. sizeof(nums) / sizeof(int)를 사용하여 배열의 원소 개수를 계산합니다.

열 번째 블록 (배열 순회)

{
    // 배열 순회
    int nums[]{ 1, 2, 3, 4 };
    int size = sizeof(nums) / sizeof(int);
    for (int i = 0; i < size; ++i)
    {
        cout << nums[i] << endl;
    }

    int i = 0;
    while (i < size)
    {
        cout << nums[i] << endl;
        i++;
    }
}
  1. nums 배열을 초기화 리스트로 선언합니다.
  2. sizeof(nums) / sizeof(int)를 사용하여 배열의 크기를 계산합니다.
  3. for 문을 사용하여 배열을 순회하면서 각 요소를 출력합니다.
  4. while 문을 사용하여 배열을 순회하면서 각 요소를 출력합니다.

열한 번째 블록 (배열 크기 구하기)

{
    // 배열 개 수 구하기 
    int nums[3];
    int nSize = size(nums);
    cout << nSize << endl;
}
  1. nums 배열을 선언합니다.
  2. C++17에서 도입된 size(nums) 함수를 사용하여 배열의 크기를 구합니다.
  3. 배열의 크기를 출력합니다.

열두 번째 블록 (배열 복사)

{
    // 배열 복사
    int nums0[3] = { 0, 1, 2 };
    int nums1[3];

    // 대입 안 됨
    // nums1 = nums0;

    // 순회를 이용한 복사
    for (int i = 0; i < 3; ++i)
    {
        nums1[i] = nums0[i];
    }

    // 함수를 이용한 복사
    memcpy(nums1, nums0, sizeof(nums0));
    memcpy(&nums1, &nums0, sizeof(nums0));
    copy(nums0, nums0 + 3, nums1);
}
  1. nums0 배열을 초기화 리스트로 선언하고 값을 설정합니다.
  2. nums1 배열을 선언합니다.
  3. 배열을 직접 대입할 수 없기 때문에 주석 처리된 부분을 사용하면 오류가 발생합니다.
  4. for 문을 사용하여 배열의 각 요소를 복사합니다.
  5. memcpy 함수를 사용하여 배열을 복사합니다.
  6. C++ STL의 copy 함수를 사용하여 배열을 복사합니다.

열세 번째 블록 (홀수번 반복되어 있는 한 개의 수 찾기)

{
    // 홀수번 반복 되어 있는 한 개의 수 구하기
    int nums[] = { 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 3 };
    int result = 0;
    for (int i = 0; i < size(nums); ++i)
    {
        result ^= nums[i];
    }

    cout << result << endl; // 4
}
  1. nums 배열을 선언하고 초기화 리스트로 값을 설정합니다.
  2. result 변수를 0으로 초기화합니다.
  3. for 문을 사용하여 배열의 각 요소를 순회하면서 XOR 연산을 통해 홀수번 반복된 값을 찾습니다.
  4. 결과를 출력합니다. 이 예제에서는 4가 홀수번 반복되어 있습니다.

열네 번째 블록 (버블 정렬)

{
    int nums[]{ 5, 4, 3, 1, 7, 4, 3, 5, 6, 1, 2 };
    for (int i = 0; i < size(nums); ++i)
    {
        for (int j = 0; j < size(nums) - i - 1; ++j)
        {
            if (nums[j] > nums[j + 1])
            {
                int temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < size(nums); ++i)
    {
        cout << nums[i] << endl;
    }
}
  1. `nums

` 배열을 초기화 리스트로 선언합니다.
2. 버블 정렬 알고리즘을 사용하여 배열을 정렬합니다.

  • 첫 번째 for 문은 배열의 각 요소를 순회합니다.
  • 두 번째 for 문은 인접한 두 요소를 비교하고, 큰 값을 뒤로 이동시킵니다.
  • temp 변수를 사용하여 값을 교환합니다.
  1. 정렬된 배열을 출력합니다.
profile
李家네_공부방

0개의 댓글