• 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 

 

for 문 (c + +)

Microsoft Visual Studio c + +의 표준 c + +에 대 한 참조입니다.

docs.microsoft.com

 


  • 증가 연산자 & 감소연산자

두개 모두 접두(++a), 접미(a++) 방식으로 사용 가능

 

접두식으로 했을 경우와 접미로 사용했을 경우 연산자 순서가 차이가 많이 나니 주의

 

 

 

한 구문에 너무 많이 사용하면 한대 맞을 수 도있다

int a = 3 * a++ - (34 - --a)/++a;

 

포인터와 함께 사용할 수 있다

접두형 끼리 붙었을때 (++*a) 오른쪽에서 왼쪽으로 실행하면 된다고 생각하면 된다

 

++*a를 예로 *가 ++보다 오른쪽에 있으니 먼저 실행한다.

= a포인터에 들어있는 값( a[0]의 값  )

 

그 후에 왼쪽에 있는 ++가 왼쪽에 있었으니 다음으로 실행된다

여기서 ++가 되는 대상은 단순 a가 아닌 ' * ' 를 실행시킨 *a라는 점

= *a의 값에 ++ (a[0]은 1이며 ++하면 2가 된다)

 


  • 부수 효과 & 시퀀스 포인트

간단하게 부수효과는 수식이 진행될 때 변수에 값이 변경되는 효과

 

 

시퀀스 포인트는 부수효과,특히 접미어 방식이 일어나는 시점을 명확히 알 수 있게 해주는 시점을 나타낸다고 보면 된다

포인트로는 수식의 끝, 세미콜론, While루프의 검사 조건 ...등이 있다

 

위의 코드중 접미에 붙은 ++ 가 일어나는 순서와 시점은 구체적으로 알 수 없다

 

다만 시퀀스 포인트(위의 코드에서 ' ; ' )에서 모두 실행이 되었다고 알수있다

 

이 지점에 왔을 때는 모든 부수효과가 실행 완료 됐다 라고 알려주는 것 이게 시퀀스 포인트의 의미

 


  • 접두어 & 접미어 방식

모두 부수효과가 나타난다 가정시에

 

접두어 방식은 기본값에 부수효과를 적용하고 리턴한다

 

접미어 방식은 기본값을 복사하고 복사한 값에 부수효과를 적용하고 리턴한다

 

이 차이가 있으므로 접두어 방식이 조~~~~~~~~금 낫다고 한다

 

 

나중에 클래스사용시 ++나 -- 를 오버로딩하여 사용할 수 있는데

 

크기가 큰 클래스는 복사비용이 꽤 들테니 둘다 사용해서 상관없다면 접두어 방식을 사용하는 습관을 가지자

 

 

+ Recent posts