취미생활

[C++11] 중괄호로 STL 자료구조 초기화 간편하게 하기 본문

컴퓨터/C++

[C++11] 중괄호로 STL 자료구조 초기화 간편하게 하기

달다달아 2022. 11. 16. 00:51

C++ 11 부터 데이터를 중괄호로 초기화할 수 있는 기능이 추가되었다.

 

이게 무슨 말인고 하니

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main(int argc, char *argv[])
{
    vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    for(auto it : a)
    {
        cout << it << endl;
    }

    map<int, int> b;
    b[0] = 1;
    b[1] = 2;
    b[3] = 3;
    b[4] = 4;
    for(auto it : b)
    {
        cout << it.first << "," << it.second << endl;
    }
}

기존에는 vector, map과 같은 자료구조 초기화 시에 이런 식으로 데이터를 하나씩 넣어줘야 했다.

 

상당히 불편하고 라인도 길어지는데 이러한 점을 다음과 같이 간편하게 선언할 수 있다!

 

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main(int argc, char *argv[])
{
    vector<int> a{1,2,3,4};
    for(auto it : a)
    {
        cout << it << endl;
    }

    map<int, int> b{{0,1}, {1,2}, {2,3}, {3,4}};
    for(auto it : b)
    {
        cout << it.first << "," << it.second << endl;
    }
}

짜잔!

 

이젠 더이상 디버깅 작업을 위해 push_back을 넣을 필요가 없어졌다!

 

참고로 이러한 생성 방식은 당연하게도 클래스 에서도 사용할 수 있다.

#include <iostream>
#include <vector>
#include <map>
using namespace std;

class A
{
public:
    A(int a, int b)
    {
        cout << "a : " << a <<", b : " << b << endl;
    }
};

int main(int argc, char *argv[])
{
    A a{1,3};
}
[Running] cd "c:\Users\노트북\Desktop\project\cpp\" && g++ main.cpp -o main && "c:\Users\노트북\Desktop\project\cpp\"main
a : 1, b : 3

클래스 생성 시에도 사용은 가능하지만, 사용은 안할 듯 하다.

 

왜냐면 레거시 코드에서 클래스를 괄호 연산자를 통해 생성했기 때문에 해당 방식을 사용할 수가 없다.

 

아무리 좋아보이고 새로운 것이라 할 지라도 레거시 코드와 다르게 만들면 다른 사람들이 알아보기 힘드니까

 

가급적 기존의 룰을 따르 되, STL 자료구조 초기화 같이 코드를 짜기 쉽게 만들어주는 내용은 적용하면 좋을 듯!

Comments