Notice
Recent Posts
Recent Comments
Link
취미생활
[C++11] 중괄호로 STL 자료구조 초기화 간편하게 하기 본문
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 자료구조 초기화 같이 코드를 짜기 쉽게 만들어주는 내용은 적용하면 좋을 듯!
'컴퓨터 > C++' 카테고리의 다른 글
[C++] Map 과 함수 포인터를 이용한 함수 호출 아이디어 (2) | 2022.11.16 |
---|---|
[C++11] std::function 템플릿으로 함수 포인터 대체하기 (0) | 2022.11.16 |
[C++] 구조체 비트 필드로 비트 단위 변수 사용하기 (0) | 2022.09.05 |
[C++] 접근 제한자의 범위 (0) | 2020.07.16 |
[C++] 구조체로 여러 타입의 변수 묶어서 사용하기 (0) | 2020.07.16 |
Comments