C++에서는 자료구조(배열, Queue, Stack …)을 STL(Standard Templete Library)을 통해 더욱 쉽게 구성하고 활용할 수 있음
이 중 배열을 쉽게 구성할 수 있는 vector 라이브러리는 매우 빈번하게 사용되는 라이브러리
vector는 메모리 공간이 부족할 시 추가적으로 메모리 공간을 재할당 할 수 있기 때문에 고정된 사이즈의 배열보다 유리할 때가 많음
#include <vector> //vector STL 불러오기
//생성자(Constructor)
vector<int> vec; //int형 빈 배열 vec 선언
vector<char> vec; //char형 빈 배열 vec 선언
vector<int> vec(10); //int형 10 크기 배열 vec 선언(0으로 초기화)
vector<int> vec(10, 1); //int형 10 크기 배열 vec 선언(1로 초기화)
//원소 접근
for(auto i = vec.begin(); i < vec.end(); i++){ //iterator(반복자)를 통한 접근
(*i) += 1; //i는 원소의 주소값을 나타내기 때문에 *를 통해 원소에 접근
}
for(int i = 0; i < vec.size(); i++){ //[]를 통한 접근
vec[i] += 1;
}
for(auto& i : vec){ //c++에서는 &연산자를 형식 앞에 사용 시 해당 값을 복사해오는 것이 참조(Reference)할 수 있음
i += 1;
}
람다식이란 람다 표현식, 또는 익명 함수라는 이름으로 불림
C++에서는 C++11 이후에 추가되었음(Java에도 존재)
일반적인 함수에서 이름이 사라진 함수를 람다식이라고 표현
//일반적인 함수
int add(int a, int b){
return a + b;
}
int c = add(10, 20);
//람다식
[](int a, int b){ return a + b }; //익명 함수 생성
int c = [](int a, int b){ return a + b; }(10, 20); //함수 선언과 동시에 호출 가능
//외부 변수 참조 방법
int c = 1;
[](int a, int b){ return a + b; }; //int c 접근 불가
[=](int a, int b){ return a + b + c; }; //외부 변수(c)를 복사해와서 쓸 수 있음
[&](int a, int b){ c = a + b; }; //외부 변수를 참조하여 쓸 수 있음
STL 중 algorithm 라이브러리에 포함되어 있음
for_each() 함수는 반복자(iterator)를 이용하여 반복문을 쉽게 수행할 수 있음
for_each() 함수는 원소를 복사해오기 때문에 원소 수정을 할 시에는 사용하지 않음
또한 해당 함수는 마지막 인자로 함수를 입력받는데 이 때 위의 람다식을 활용할 경우 더욱 간결한 코드를 작성할 수 있음
algorithm에는 해당 함수 이외에도 copy(), find_if(), sort() 등 유용한 함수가 다수 존재