목록CPP (65)

std::vector 이전 포스팅에서 std::array를 소개했다. std::array는 C++의 내장 고정 배열(fixed array) 기능을 더 안전하고 유용한 형태로 제공한다. 마찬가지로 C++ 표준 라이브러리에는 동적 배열(dynamic array) 작업을 더 안전하고 쉽게 해주는 std::vector를 제공한다. An introduction to std::vector std::vector는 자체 메모리 관리를 처리하는 동적 배열 기능을 제공한다. 즉, new와 delete를 사용하여 메모리를 동적으로 할당, 해제하지 않아도 런타임에 길이가 설정된 배열을 만들 수 있다. std::vector는 헤더에 정의되어 있다. std::vector 변수 선언은 쉽다. 초기화 하는 방법을 살펴보자 std::..

std::array 이전 포스트들에서 고정 배열(fixed array)과 동적 배열(dynamic array)을 배웠다. 두 가지 배열 모두 C++에 내장되어 있지만, 포인터로 형 변환되었을 시 배열 길이 정보가 손실되고, 동적 배열은 지저분한 할당 해제 문제가 있다. 이러한 문제를 해결하기 위해 C++ 표준 라이브러리는 배열 관리를 쉽게 해주는 std::array와 std::vector가 있다. An introduction to std::array in C++11 C++ 11에서 소개된 std::array는 함수에 전달할 때 포인터로 형 변환되지 않는 고정 길이 배열이다. std::array는 헤더의 std namespace 내부에 정의되어 있다. array를 선언할 때 std::array 변수 선언은..

이중 포인터와 동적 다차원 배열 이전 포스팅에서 정적 배열을 이용해서 다차원 배열 만드는 것에 대해 포스팅했었다. 정적 다차원 배열 Multidimensional Arrays 다차원 배열 (Multidimensional Arrays) 컴퓨터 속에 메모리는 1차원적인 주소 공간을 가지고 있다. 단독주택 여러 개가 일렬로 늘어져 있는 형태를 생각하면 된다. 하지만 프로그래밍을 하다 보면 아파 hyoniidaaa.tistory.com 이번에는 동적 메모리 할당을 통해서 다차원 배열을 만드는 방법에 대해 설명하겠다. (+ 이중포인터를 사용하는 방법, 사용하지 않는 방법 포함) 포인터 변수는 이렇게 선언할 수 있다. 포인터도 변수다. 그러니까 포인터에 대한 포인터도 만들 수 있다. 그걸 보통 이중포인터라고 부른다..

void pointer void pointer는 모든 데이터 자료형을 가리킬 수 있는 특별한 타입의 포인터이다. 제네릭 포인터(generic pointer)라고도 불린다. generic이란 포괄적이다 라는 뜻을 가지고 있다. void 포인터는 void 키워드를 사용하여 일반 포인터처럼 선언한다. void* ptr; //ptr is a void pointer void 포인터는 모든 데이터 자료형의 객체를 가리킬 수 있다. 예를 들어보자 int, float, char 한 개씩 선언하고 void 포인터를 일단 nullptr로 초기화를 했고 void pointer에 int, float, char 타입의 주소도 넣어봤는데 문제가 없다. just 주소 그 자체이기 때문에 void 포인터에다가 주소를 넣는 것은 문제..

For - each 반복문 for 문 for statement for 문 for statement C++에서 가장 많이 사용하는 반복문은 for 문이다. for 문은 각 반복 후에 루프 변수의 값을 쉽게 정의, 초기화 및 변경 할 수 있기 때문에 반복해야 하는 횟수를 정확히 알고 있을 hyoniidaaa.tistory.com 배열과 반복문 배열과 반복문(Array and Loop) 이전 포스트에서 배열 인덱스는 상수 값이 아니어도 된다는 것을 알았다. 인덱스는 변수일 수도 있다. 즉, 루프 변수를 사용하여 배열의 모든 요소를 반복하고 일부 hyoniidaaa.tistory.com 지금까지 array를 for문으로 돌릴 때 구현할 양이 많아서 부담스러웠다. 훨씬 간단해진 for-each 문에 대해서 설명드..

Member selection with pointers and references 포인터와 참조를 구조체(structure) 또는 클래스(class)에 대해서 사용할 때는 포인터와 참조를 통해서 구조체 또는 클래스의 멤버에 접근할 수 있다. 이 때 어떤 연산자를 사용하는지 설명드리겠다. 간단한 structure를 하나 만들어보자. 예를 들어 Person이 있으면 우리가 Person의 멤버 age에 접근할 때는 person하고 .을 찍었다. . 은 멤버 selection operator로 멤버를 선택하게 해주는 연산자이다. 나중에 멤버 function, class, 객체지향 배울때 유용하게 사용될 연산자이다. 이렇게 하는 방법이 한가지 있고 레퍼런스를 사용해서 접근하는 방법이 있다. 이때 ref에 .을 찍..

Reference to const value const 값에 대한 포인터를 선언하는 것처럼 const 값에 대한 참조를 선언할 수 있다. const 키워드를 사용하여 참조를 선언하면 된다. 예를 들어보자 변수 하나를 선언하고 다음으로 const를 붙여보자 이렇게 const를 붙인다면 ref_x의 값을 못 바꾼다. 반대로 그리고 int x에 const가 붙은 상태에서 밑에 const를 또 붙이는 것은 괜찮다. Initializing references to const values const 참조는 non-nonst 값, const 값 및 R-Value로 초기화할 수 있다. 다음으로 const int x 에서 const를 뗼 수 있다. const int &ref_x = x; 여기서 떼도 상수를 가리키는 포인..

참조형 변수 (Reference variable) 지금까지 두 가지 변수 타입을 공부했다. 일반 변수 : 직접 값을 보유 포인터 : 다른 값의 주소(또는 null)를 보유 참조형(reference)은 C++에서 지원하는 세 번째 변수 타입이다. 참조형은 다른 객체 또는 값의 별칭으로 사용되는 C++ 타입이다. C++은 세 가지 종류의 참조형을 지원한다. non-const 값 참조형 const 값 참조형 r-value 참조형 포인터를 사용하다 보면 * 을 붙여주는 게 조금 귀찮을 수 있다. de-referencing 할 때 일일이 *을 붙여줘야 하는데 조금 불편하다. 특정한 경우에 포인터보다 조금 사용하기 편한 게 있다. 그게 바로 참조 변수이다. 우리가 보통 포인터를 쓸 때에는 int value = 5;..

Pointing to const variables 일반 변수에 const를 사용해서 상수로 만들 수 있듯이 포인터에도 const를 사용할 수 있다. 그런데 일반변수와는 조금 다르다. 포인터와 const가 어떻게 사용되는지 설명드리겠다. 지금까지 보았던 모든 포인터는 상수(const)가 아닌 값을 가리키는 비-상수(non-const) 포인터다. 하지만 값이 상수인 경우에는 어떻게 될까? value에 const를 걸어보자. 위 코드는 컴파일되지 않는다. value가 const니까 포인터로 못 만드는 건가? 생각할 수 있지만 그렇지 않다. pointer도 const가 앞에 붙으면 할 수 있다. 상수 변수는 값을 변경할 수 없다. 만약 상수가 아닌 포인터가 상수 변수를 가리킨 다음에 역참조하여 값을 바꿀 수 있..

동적으로 배열 할당하기 (Dynamically allocating arrays) 이전에 배운 정적 배열(고정 배열)은 그 배열의 길이가 컴파일 타임에 결정되어있어야 사용할 수 있었다. 동적 할당 배열은 런타임에 배열의 사이즈를 결정하고, 그때그때 메모리를 OS로부터 받아오기 때문에 좀 더 유동적으로 사용할 수 있다. 동적 할당 배열에 대해서 설명 드리겠다. 정적 배열을 사용할 때에는 원소가 몇 개 들어갈 수 있을지가 const로 들어갔어야 했다. 즉, 컴파일 타임에 딱 고정되어 있어야 한다는 얘기다. 위 예제를 이렇게 바꾸거나, cin으로 입력받는 게 불가능했다. 이것을 동적 할당 배열로 바꿔보자. 동적으로 배열을 할당하려면, new[ ] 연산자와 delete[ ] 연산자를 사용해야 한다. cin으로 l..