C++에서 std::array의 사용법은?
_____A1: std::array는 C++11부터 제공되는 고정 크기 배열 컨테이너로, 크기가 컴파일 타임에 결정되며 배열처럼 연속된 메모리를 갖습니다. std::array는 표준 라이브러리의 배열 래퍼로, 배열과 비슷하지만 STL 컨테이너와 유사한 인터페이스를 제공합니다.
Q2: std::array 사용법의 기본 문법은 어떻게 되나요?
A2:
```cpp
include
std::array<타입, 크기> 배열이름;
```
예:
```cpp
std::array
```
Q3: std::array 초기화 방법에는 어떤 것들이 있나요?
A3:
- 리스트 초기화:
```cpp
std::array
```
- 중괄호 생략 가능 (C++17 이상):
```cpp
std::array
```
- 기본값으로 초기화:
```cpp
std::array
```
Q4: std::array 크기를 어떻게 확인하나요?
A4: size() 멤버 함수를 사용합니다.
```cpp
std::array
std::size_t sz = arr.size(); // sz == 5
```
Q5: 원소에 접근하는 방법은?
A5:
- 인덱스 접근: arr[index]
- at() 메서드 (예외 처리 포함): arr.at(index)
- front(), back()로 첫 번째, 마지막 원소 접근 가능
```cpp
auto first = arr.front();
auto last = arr.back();
```
Q6: std::array를 복사하거나 대입할 수 있나요?
A6: 네, std::array는 복사 및 대입 연산을 지원합니다.
```cpp
std::array
std::array
```
Q7: std::array의 메모리는 어떻게 관리되나요?
A7: std::array는 내부적으로 일반 배열로 구현되어 있어 요소들이 연속된 메모리에 저장됩니다. 별도의 동적 할당이 없으며 스택 메모리를 사용합니다.
Q8: std::array의 주요 멤버 함수는 무엇이 있나요?
A8:
- size(): 배열 크기 반환
- at(index): 범위 검사 후 요소 반환
- operator[](index): 범위 검사 없이 요소 반환
- front(): 첫 번째 요소 반환
- back(): 마지막 요소 반환
- data(): 내부 배열 포인터 반환
- fill(value): 모든 원소를 value로 설정
- swap(other): 다른 std::array와 요소 교환
A9:
- std::array는 크기가 고정된 배열로 컴파일 타임에 크기가 결정됨
- std::vector는 동적 배열이며 크기를 런타임에 변경 가능
- std::array는 스택 메모리, std::vector는 힙 메모리 사용
- std::array는 복사 시 전체 데이터를 복사하지만, std::vector는 포인터와 용량을 관리함
Q10: std::array에 대해 range-based for문을 사용할 수 있나요?
A10: 네, std::array는 STL 컨테이너이므로 range-based for문으로 반복할 수 있습니다.
```cpp
for (auto& elem : arr) {
// elem 사용
}
```
Q11: std::array와 C 스타일 배열의 차이점은?
A11:
- std::array는 컨테이너로 멤버 함수 제공, 타입 안전 및 STL 호환 기능 제공
- C 스타일 배열은 포인터처럼 동작하며 크기 정보가 따로 없음
- std::array는 복사, 대입, 표준 알고리즘 지원 등이 우수함
Q12: std::array에서 표준 알고리즘을 바로 사용할 수 있나요?
A12: 네, std::array는 begin()과 end() 멤버 함수를 제공하므로 다음처럼 사용 가능합니다.
```cpp
include
std::array
std::sort(arr.begin(), arr.end());
```
Q13: std::array의 data() 함수는 무엇을 반환하나요?
A13: 내부 배열의 포인터(T*)를 반환합니다. 배열을 C 스타일 API에 넘길 때 유용합니다.
```cpp
int* p = arr.data();
```
Q14: std::array의 크기는 변경할 수 있나요?
A14: 불가능합니다. 크기는 템플릿 인자로 고정되어 있으며 런타임에 변경할 수 없습니다.
Q15: std::array를 함수 파라미터로 전달하는 방법은?
A15: 보통 참조나 const 참조로 전달합니다. 크기 템플릿 인자를 같이 받아야 합니다.
```cpp
template
void func(const std::array
```
Q16: std::array의 모든 값을 초기화하는 쉬운 방법은?
A16: fill() 함수를 사용하세요.
```cpp
arr.fill(0); // 모든 값을 0으로 설정
```
Q17: std::array 내부 배열 크기는 constexpr로 사용할 수 있나요?
A17: 네, std::array는 constexpr이 가능하므로 컴파일 타임 상수처럼 사용할 수 있습니다.
```cpp
constexpr std::array
```
Q18: multi-dimensional std::array를 선언하려면?
A18: 내포된 std::array를 사용합니다.
```cpp
std::array
```
Q19: std::array의 요소 타입이 클래스일 때 어떤 점을 유의해야 하나요?
A19: 생성자, 복사 및 대입 연산자가 제대로 정의되어 있어야 하며, 기본 생성자가 없으면 컴파일 오류가 발생할 수 있습니다.
Q20: std::array는 STL의 다른 컨테이너와 호환되나요?
A20: 예. 모든 STL 알고리즘 및 함수는 begin(), end()를 지원하는 컨테이너를 사용하므로 std::array와 문제없이 호환됩니다.
작성자:
정세빈 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:38
조회수: 157 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 157 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.