본문 바로가기
프로그래밍

[C++11] std::vector 배열 초기화 / C++98에서 대안 방법 정리

by _BlankSpace 2019. 1. 20.

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 = {12345};
    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 = {678910};
    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

댓글