이름공간 (name space)
왜생겼을까? 함수나 심볼들이 있는 공간을 명확하게 하자 .. 필수는 X
namespace first
{
int x = 5; // 정수형 x 는 그룹 first의 멤버
}
std::cout << "x=" << first::x << std::endl; // first그룹에 있는 x를 쓰겠다!
일일이 하는게 귀찮다면
using first::x 를해주면
cout<< "x=" << x << endl; // first 의 x를 찾음
using namespace first를 하면 일단 first 그룹에서 찾고 없다면 순서대로 찾아서 나온걸씀.
cout<< "x=" << x << endl; // first 의 x를 찾음, 없다면 순서대로 찾아서 나온걸씀
그룹이 없는 전역공간은
ex) ::i
first그룹의 i는
ex) first::i
first그룹 안의 second그룹의 i는
ex) first::second::i
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
템플릿
코드의 재사용성을 위해
각 함수들의 구성은 완전 똑같지만 타입,인자가 다를때 코드의 재사용성을 위해 하나로 합침.
int max(int a,int b)
{
return a > b ? a : b;
}
char max(char a,char b)
{
return a > b ? a : b;
}
double max(double a,double b)
{
return a > b ? a : b
}
이 세가지를 함수 템플릿을 이용하여 하나로 합침!
template <class T>
T max(T a,T b)
{
return a > b ? a : b;
}
원래 함수만들때 선언은 헤더(.h)파일에 정의는 (.cpp) 파일에 작성했는데
템플릿을 사용할경우엔 헤더(.h)파일에 다 작성해야함.
왜냐하면, 아직 타입이 정해지지않았기 때문에 실행시 exe파일에 오브젝트로 만들어 질수 없기 때문이다.
STL 과 템플릿은 나중에 필수 ! 잇힝
typedef 을 활용하즈아!
#include "stack.h"
ex) typedef Stack<double> StackDouble // 이제 StackDouble 이라는 실수형스택 타입을 하나 만든것이여
StackDouble a; // a는 실수형 스택
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
어음청 ! 좋은것
1. 컨테이너 : 데이터(객체)를 담는 바구니(객체) , 가장 중요한 것. 바구니에 데이터를 담고 빼고 ~
2. 반복자 : 포인터를 일반화한 것
3. 함수객체
4. 어댑터 : 기존이 객체를 사용자가 변겨에서 새로운 객체를 만드는것.
5. 알고리즘
1 컨테이너
순차적 vs 연관적 컨테이너
순차적 : vector, list, deque
연관적 : map , multimap, set, multiset
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vector
정적 배열 과 동적 배열의 장점을 모은것이 vector
#include<vector> //여기서 .h가 붙는 헤더들은 c언어의 라이브러리임.
vector <int> v0; // default 생성 크기 = 0
vector <int> v1(3); // 크기는 3 각각의 값은 0으로 채워짐
vector <int> v2(5,2); // 크기는 5 각 값은 2로 채워짐
vector <int> v4(v2); // v2의 복제본을 생성
vector <int> v(v4.begin()+1, v4.begin()+3); // v4의 부분 복제본 벡터를 생성
v.begin() 벡터의 첫 번째 위치
v.end() 벡터의 마지막 위치의 다음 위치
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
list = deque에 중간 위치의 추가나 삭제 고려
'게임프로그래밍(c++)' 카테고리의 다른 글
4. 연관 컨테이너들 , set ~ (0) | 2017.03.29 |
---|---|
1. c언어 개요 (0) | 2017.03.08 |