- stl vector & stl array
기존 정적배열의 관리를 쉽게해주는 템플릿 클래스
에서 가변적으로 크기를 쉽게 조정 할 수 있게 만든 템플릿 클래스
vector의 경우 배열의 크기를 런타임중에도 계속해서 변경 할 수 있는 특징이 있다
내부적으로 new delete를 사용한다
array의 경우 크기는 컴파일타임시 초기화를 해야 해 크기가 정적이나
대입연산자의 가능, 배열 크기 이상의 값을 참조했을 때 예외를 반환하는등 좀 더 편하게 다룰 수 있다
- 표현식
값, 또는 값 + 연산자 의 조합으로 이루어진 명백한 하나의 값을 가지는 식
일단 지금까지 공부한걸로는 세미콜론을 뺄때 값이 있는 것들은 표현식이 되는거 같다
선언, 반복문 등은 표현식이 아니다
리턴문도 표현식이 아니라고 하는데 이건 좀 더 봐야할듯
- for
구성
// 세 개 표현식(expression)으로 이루어진 제어부분
for( Loop Initialization ; Loop Test ; Loop Update )
=init-expression =cond-expression =loop-expression
{
Loop Body;
}
순서
Loop Init ─> Loop Test ─True─> Loop Body ─> Loop Update ─> Loop Test ....
│
└──False─> 종료
제어 부분의 세가지 부분은 모두 생략 가능하다 ( 모두 생략시 무한루프 )
init-expression, loop-expression은 ' , ' 으로 여러 구문을 사용할 수 있다
※' , '를 cond-expression에 사용을 해도 오류는 나지 않으나 아마 정상 작동 안될 확률99%다
init-expression에 선언한 변수는 for문 안의 지역변수다
for문이 종료되면 사라진다
※단 구형c++ 경우 루프 앞에 선언한 것으로 인식해 삭제하지 않는 경우도 있다
책보다 문서가 더 정리가 잘되어있다
https://docs.microsoft.com/ko-kr/cpp/cpp/for-statement-cpp?view=msvc-160#remarks
- 증가 연산자 & 감소연산자
두개 모두 접두(++a), 접미(a++) 방식으로 사용 가능
접두식으로 했을 경우와 접미로 사용했을 경우 연산자 순서가 차이가 많이 나니 주의
한 구문에 너무 많이 사용하면 한대 맞을 수 도있다
int a = 3 * a++ - (34 - --a)/++a;
포인터와 함께 사용할 수 있다
접두형 끼리 붙었을때 (++*a) 오른쪽에서 왼쪽으로 실행하면 된다고 생각하면 된다
++*a를 예로 *가 ++보다 오른쪽에 있으니 먼저 실행한다.
= a포인터에 들어있는 값( a[0]의 값 )
그 후에 왼쪽에 있는 ++가 왼쪽에 있었으니 다음으로 실행된다
여기서 ++가 되는 대상은 단순 a가 아닌 ' * ' 를 실행시킨 *a라는 점
= *a의 값에 ++ (a[0]은 1이며 ++하면 2가 된다)
- 부수 효과 & 시퀀스 포인트
간단하게 부수효과는 수식이 진행될 때 변수에 값이 변경되는 효과
시퀀스 포인트는 부수효과,특히 접미어 방식이 일어나는 시점을 명확히 알 수 있게 해주는 시점을 나타낸다고 보면 된다
포인트로는 수식의 끝, 세미콜론, While루프의 검사 조건 ...등이 있다
위의 코드중 접미에 붙은 ++ 가 일어나는 순서와 시점은 구체적으로 알 수 없다
다만 시퀀스 포인트(위의 코드에서 ' ; ' )에서 모두 실행이 되었다고 알수있다
이 지점에 왔을 때는 모든 부수효과가 실행 완료 됐다 라고 알려주는 것 이게 시퀀스 포인트의 의미
- 접두어 & 접미어 방식
모두 부수효과가 나타난다 가정시에
접두어 방식은 기본값에 부수효과를 적용하고 리턴한다
접미어 방식은 기본값을 복사하고 복사한 값에 부수효과를 적용하고 리턴한다
이 차이가 있으므로 접두어 방식이 조~~~~~~~~금 낫다고 한다
나중에 클래스사용시 ++나 -- 를 오버로딩하여 사용할 수 있는데
크기가 큰 클래스는 복사비용이 꽤 들테니 둘다 사용해서 상관없다면 접두어 방식을 사용하는 습관을 가지자
'C++ > [책] C++ 기초 플러스' 카테고리의 다른 글
[ 281p ~ 327p ] EOF, 2차원배열, If, 논리표현식 (0) | 2021.07.07 |
---|---|
[ 254p ~ 280p ] 복합구문&콤마연산자, 관계표현식, tpyedef(define&using), 문자열 비교, while, do while, Range based for loop (0) | 2021.07.06 |
[ 210p ~ 219p ] 도트 멤버 연산자 & 화살표 멤버 연산자, 데이터의 저장공간, 포인터 장난 (0) | 2021.07.01 |
[ 203p ~ 209p ] 문자열 상수 (0) | 2021.06.30 |
[ 179p ~ 203p ] 포인터, NULL&nullptr, New, Delete, 배열 포인터 (0) | 2021.06.28 |