# 배열
- 배열
Lvalue를 선언할 때 '[]' 위치가
C++과는 좀 다르기에 헷갈리지 않아야 한다
초기화 방식은 다양하게 지원하는 것을 알 수 있다
// C++
int arr[5];
int* arr = new int[5];
// C#
int[] arr = new int[5];
int[] arr2 = new int[5] { 10, 20, 30, 40, 50 };
int[] arr2 = new int[] { 10, 20, 30, 40, 50 };
int[] arr2 = { 10, 20, 30, 40, 50 };
- C# 배열은 동적할당
C++ 배열은
정적할당도 가능하고, new 키워드를 통해 동적할당도 가능하다
반면, C# 배열은
참조타입으로 동적할당을 한다는 점이 중요하다
- arr.Length
C++에서 sizeof()를 통해서 배열의 개수를 확인한다
int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]); // 전체 크기 / 요소 크기
std::cout << "배열 길이: " << length << std::endl;
참고로 C++ vector의 경우는 .size()를 통해 동적배열의 개수를 확인한다
std::vector<int> arr = {1, 2, 3, 4, 5};
std::cout << "배열 길이: " << arr.size() << std::endl;
반면, C#에서는 arr.Length를 통해 배열의 개수를 확인한다
int[] scores = new int[5] { 10, 20 , 30, 40, 50 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine(scores[i]);
}
- foreach
C#의 foreach는 C++에서 범위기반 for문과 유사하다
// C#
foreach (int i in scores)
{
Console.WriteLine(i);
}
// C++
for (int i : scores)
{
std::cout << i << std::endl;
}
둘의 차이는 아래와 같고
쉽게 설명해 C++에서 const&를 붙였다고 생각하면 된다
C# foreach | C++ 범위 기반 for | |
순회 방식 | IEnumerator | begin() / end() 반복자 |
변경 가능 여부 | 읽기전용 | 복사, 참조(&) 모두 가능 |
사용 대상 | 배열, 리스트, 컬렉션 (IEnumerable<T>) | vector, array, set 등 stl 컨테이너 |
- C# foreach vs C++ foreach
C#의 foreach는 C++의 foreach와는 완전히 다른 기능이다
헷갈릴 수 있는 부분이다
C++의 foreach와 C#의 foreach의 차이는 아래와 같다
C++ std::for_each | C# foreach | |
역할 | 범위 내 모든 요소에 함수 객체 적용 | 컬렉션 요소를 순회하며 처리 |
사용 방식 | std::for_each(start, end, 함수객체) | foreach (var item in collection) {...} |
함수형 프로그래밍 | 함수 객체 사용 (lambda, functor) | 일반적인 루프 구조 |
상태 변경 가능 여부 | 요소 수정 가능 (& 활용) | 요소 자체 변경 불가 |
추가적으로 C++ foreach의 사용법은 아래와 같다
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 모든 요소를 출력하는 Lambda 함수 활용
std::for_each(numbers.begin(), numbers.end(), [](int num)
{
std::cout << num << " ";
});
return 0;
}
- 다차원 배열
int [ , ] arr = new int [2, 3];
다차원 배열을 선언하는 문법은 위와 같다
[] 안에 순서를 읽는 방법은 C++과 동일하며
오른쪽에서 왼쪽으로 읽으면 된다
ex. 3개의 배열이 총 2개로 구성되어 있다
다차원 배열 시, Length와 GetLength의 차이를 알아야 한다
Length는 다차원 배열의 총 전체 길이를 의미하고
GetLength(N)는 N차원의 배열의 길이를 의미한다
int [ , ] arr = new int [2, 3];
int L = arr.Length; // 6
int GL = GetLength(0); // 2
GetLength(N)의 경우는 아래와 같은 규칙을 따른다
int [ , ] arr = new int [2, 3];
int GL0 = GetLength(0); // 2
int GL1 = GetLength(1); // 3
'C# > [루키스] 자료구조' 카테고리의 다른 글
[C# 섹션 5] Dictionary (0) | 2025.06.23 |
---|---|
[C# 섹션 5] List (2) | 2025.06.23 |