auto 는 컴파일러가 'Inferred Data type"으로 "추론할 수 있는 데이터 타입"으로
자동 형 변환해주는 것이다.
std 의 vector같은 컨테이너를 사용할 때
다음과 같은 구문을 흔히 봐왔다.
std::vector<int> vec
std::vector<int>::iterator itr;
for(itr = vec.begin(); itr != vec.end(); ++itr){
}
oh.. shit for loop 한번 쓰겠다고 iterator를 이렇게..?
auto itr = vec.begin() ; itr != vec.end(); ++itr
이것만으로 쌉거눙; 자동으로 해당 container 데이터 타입에 맞는 pointer를 반환해줌.
(auto Casting)
[Range based for loop]
C++ 11에서 추가됨.
for ( auto element : vec) {
자동 형 변환해주고
실제로 값이 있는 애들만 긁어줌
근데 이 때 문제가
element = vec[i] (값 복사) 가 일어난다는 점임
이걸 보완하기 위해
[구문]
auto variable_name = init_value(변수, 상수, 함수);
for loop 예시.
for( auto& element: vec) { // 배열의 요소가 vec 안에 존재하는지 검사하여 존재 하는 것만 수행(boolean)
cout << element << " ";
}
Reference를 통해 값복사가 전혀 필요없고 alias reference 활용 (별도의 메모리할당 X)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <iostream>
#include <vector>
#include <time.h>
#include <algorithm>
using namespace std;
int main(void) {
std::vector<int> vec;
std::vector<int>::iterator itr;
vec.push_back(10);
vec.push_back(20);
vec.push_back(40);
vec.push_back(30);
vec.push_back(5);
sort(vec.begin(), vec.end());
for(auto itr = vec.begin(); itr != vec.end(); ++itr) {
std::cout << *itr << " ";
}
for(auto& ele : vec) {
cout << ele << " ";
}
cout << endl;
return 0;
}
|
'C > C++' 카테고리의 다른 글
[C++] template <typename T> (0) | 2020.03.23 |
---|---|
[C++ 11] NULL vs nullptr (0) | 2020.03.21 |
[std] Vector (0) | 2020.03.21 |
C++ Naming Rule (Feat. Google C++ Guide) (0) | 2020.03.08 |
cmath, math.h (feat. 백준 3053 택시 기하학) (0) | 2019.12.08 |