C++에서는 배열을 사용하는 방법으로 아주 편한 std::vector을 사용할 수 있게 되었는데...
C++11 에서는 std::vector를 생성하고 바로 배열 값을 초기화할 수 있다.
아래 코드를 통해 확인해보자.
1 2 3 4 5 6 7 8 9 10 | #include <iostream> #include <vector> int main (void) { std::vector<int> arr = {1, 2, 3, 4, 5}; for (n : arr) { std::cout << n << std::endl; } return 0; } | cs |
5번 줄을 보면, std::vector 변수를 생성하면서 배열 값을 초기화할 수 있는 것을 볼 수 있다.
std::vector를 설명하는 페이지에는 다음과 같이 설명되어 있다.
(6) initializer list constructor Constructs a container with a copy of each of the elements in il, in the same order.
즉, c++11에서는 위와 같은 방법이 가능하다는 뜻이다.
그럼, c++98에서는 위와 같은 방법이 불가능 하다는 걸까?
결론적으로는 불가능하다. (물론, 다른 방법은 존재하겠지만 말이다.)
아래 링크를 보면, c++98에서는 해당 내용을 찾을 수 없다는 것을 알 수 있다.
http://www.cplusplus.com/reference/vector/vector/vector/
하지만, C++98에서도 위와 같은 방법으로 쉽게 배열 값을 초기화하고 싶은데.. 방법이 없을까?
그래서 생각한 방법은 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <iostream> struct Array { int _num[5]; }; int main(void) { Array arr2 = {6, 7, 8, 9, 10}; for (int i = 0; i < 5; i++) { std::cout << arr2._num[i] << std::endl; } return 0; } | cs |
위에 코드에서는 구조체 하나 생성하였다.
그리고, 구조체 변수를 생성할 때, 배열 정보를 넣어주는 것을 볼 수 있다.
이러한 방법을 사용하면, c++98과 c++11의 환경 모두에서 사용할 수 있는 방법이지 않을까 생각한다.
어떤 프로그램이든 하위 호환이 필요한 상황이 올 지 모르니..
서로 이웃 추가는 항상 환영입니다. :)
'프로그래밍' 카테고리의 다른 글
[C++] switch case문 jump to case label 오류 문제 해결 방법 (0) | 2019.01.20 |
---|---|
[C++11] auto 정리 (0) | 2017.05.24 |
[C++ 정복하자] 클래스의 기본 (0) | 2017.05.20 |
[c++ 정복하자] 목차 (0) | 2017.05.13 |
[STL] Vector 정리 (0) | 2017.04.14 |
댓글