vector

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; };  //외부 변수를 참조하여 쓸 수 있음

for_each()

STL 중 algorithm 라이브러리에 포함되어 있음

for_each() 함수는 반복자(iterator)를 이용하여 반복문을 쉽게 수행할 수 있음

for_each() 함수는 원소를 복사해오기 때문에 원소 수정을 할 시에는 사용하지 않음

또한 해당 함수는 마지막 인자로 함수를 입력받는데 이 때 위의 람다식을 활용할 경우 더욱 간결한 코드를 작성할 수 있음

algorithm에는 해당 함수 이외에도 copy(), find_if(), sort() 등 유용한 함수가 다수 존재