목록C++ (42)
컴공생의 다이어리
문제 교통 카드 잔액에 관한 프로그램을 작성하시오. 교통 카드의 초기 잔액은 20000원이다. 운임은 고정 요금이 아닌 거리 규칙에 따라 측정 및 공제된다. 기본 요금은 40km에 720원, 추가 요금은 41km부터 8km당 80원이다. 프로그램은 각 이동 거리를 입력하여 카드의 최종 잔액을 출력한다. 최소 이동 거리는 4km, 최대 이동 거리는 178km이다. 입력 값이 위에서 언급 한 범위를 벗어나면 현재 잔액을 인쇄하고 프로그램을 종료한다. 더 이상 공제되지 않으면 이동할 수 없으므로 현재 잔액을 인쇄하고 프로그램을 종료하시오. 그리고 ‘-1’을 입력하면 프로그램을 종료하시오. 코드 #include using namespace std; int main(){ int ib = 20000;//초기 잔액 ..
문제 도형을 별표(=asterisk)와 다이아몬드로 그리는 프로그램을 작성하시오. 프로그램은 도형의 크기(N)를 입력으로 사용한다. N은 5에서 29사이의 홀수이며, 올바른 입력을 한다면 별표와 다이아몬드를 그릴 문자를 각각 입력해 출력하시오. 코드 #include using namespace std; void Ast(int ast, char c)//asterisk function { int k = (ast - 1) / 2; for (int i = 0; i < k; i++) { for (int j = 0; j < i; j++) cout
배열이나 벡터 같은 연속된 자료 구조에서는 데이터 중간에 자료를 추가하거나 삭제하는 작업이 매우 비효율적이다. 그래서 연결 리스트와 같은 형태의 자료 구조를 사용한다. 기본적인 연결 리스트를 구성하려면 포인터를 하나 가지고 있어야 하고, new와 delete 연산자를 이용해 메모리를 할당하고 해제할 수 있어야 한다. c++에서는 배열에 대한 래퍼 클래스 std::array를 제공하듯이 연결리스트에 대한 래퍼 클래스인 std::forward_list 클래스를 제공한다. std::forward_list std::forward_list는 기본적인 연결 리스트의 성능을 유지하면서 추가적인 기능을 제공한다. 성능 유지를 위해 std::forward_list는 전체 리스트의 크기를 반환하거나 또는 첫 번째 원소를 ..
reserve(n) 함수 reserve 함수는 필요 없이 메모리가 재할당 되는 것을 방지한다. 이 함수를 사용함으로 인해 재할당 횟수 를 최소화 시켜준다. 컨테이너 용량을 최소 n크기 만큼 잡아놓고 쓰기 때문에 그 용량을 넘지 않는 이상 재할당을 발생하지 않는다. resize(n) 함수 resize 함수는 컨테이너 개수를 무조건 n으로 맞추고 더 넣거나 넣지 않거나 하더라도 size()는 무조건 n개로 설정된다. 할당된 개수보다 요소가 더 많을 경우 끝에 있는 요소는 버려진다. shrink_to_fit() 함수 여분의 메모리 공간을 해제하는 용도로 사용된다. 이 함수를 호출하면 벡터의 용량이 벡터 크기와 같게 설정된다. 벡터 크기가 더 이상 변경되지 않을 때 사용하면 유용한다. www.yes24.com/..
std::vector는 std::array나 c/c++에서 지원하는 배열의 문제 중 하나인 고정크기 문제를 해결한다. 배열의 경우 한번 정해지면 고정이라 수정하기가 어렵지만 벡터는 동적 배열 구조 클래스이기 때문에 초기화 과정에 데이터의 크기를 제공하지 않아도 된다. 예를들어 배열의 경우 크기를 10으로 선언하면 10이 최대이며 더 늘릴 수가 없기 때문에 초기에 넉넉히 공간을 잡아줘야 한다. 하지만 벡터의 경우 처음에 크기를 10으로 선언해도 나중에 필요에 따라서 추가하거나 줄일 수 있다. vector의 선언 및 초기화 아래는 벡터(vector)를 선언하고 초기화하는 방법이다. vector 변수명 벡터 생성 vector 변수명(숫자) 숫자만큼 벡터 생성 후 0으로 초기화 vector 변수명(숫자, 변수1..
std::array c++의 std::array는 메모리를 자동으로 할당하고 해제하며, 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿이다. 아래는 int타입의 std::array 배열을 선언한 후, 원소 값을 설정하거나 화면에 출력하는 코드이다. #include #include using namespace std; int main() { //크기가 3인 int 타입 배열 생성 std::array arr1; arr1[0] = 1;//첫번째 원소를 1로 설정 std::cout
for문은 배열을 반복할 때 편리하고 유연한 방법을 제공하지만, 조금 복잡하고 실수로 인해 오류가 발생하기 쉽다. C++에서는 범위 기반 for문(range-based for statement)이라는 새로운 유형의 루프를 도입하여 더 간단하고 안전하게 배열 등의 모든 요소를 반복하는 방법을 제공한다. 범위 기반 for문(range-based for statement) for(element_declaration : array) statement; 범위 기반 for문은 위와 같은 문법 형태를 가진다. 루프는 각 array의 요소를 반복해 element_declaration에 선언된 변수에 현재 배열 요소의 값을 할당한다. 최상의 결과를 얻으려면 element_declaration이 배열 요소와 같은 자료형이..
auto 키워드 auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다. 즉, auto 키워드를 사용하면 초깃값의 형식에 맟춰 선언하는 인스턴스(변수)의 형식이 '자동'으로 결정된다. 이것을 타입 추론(type inference)이라고 한다. 이 기능은 생성 시 변수를 초기화할 때만 작동한다. 초기화 값을 사용하지 않고 생성된 변수는 이 기능을 사용할 수 없다. 이유는 초기화된 값을 기준으로 자료형을 선택하기 때문이다. 아래에서 다양한 예제로 auto관련해서 다뤄보겠다. auto 사용 예시 아래는 int형 변수 a와 float형 변수 b의 합을 auto키워드를 통해 sum변수에 저장하고 출력한 것이다. #include using namespace std; int ..
자료 구조는 크게 순차 자료 구조와 연결 자료 구조로 구분할 수 있다. 순차(Sequntial) 자료 구조 순차 자료 구조는 모든 데이터를 단일 메모리 청크에 연속하여 저장한다. 데이터가 메모리에 저장될 때, 저장 시작 위치부터 빈자리 없이 순서대로 저장된다. 이 그림을 보면 각각의 데이터는 int형으로 모두 같은 타입이다. 첫번째 원소의 메모리 주소를 시작 주소(Base Address)라고 하는데 그림에서의 시작 주소는 100이다. 주어진 모든 데이터의 타입이 같기 때문에 두번째 데이터는 시작 주소(100)+sizeof(int)로 104이다. 세번째 데이터는 시작 주소(100)+2*sizeof(int)로 108이다. cf) int 타입은 4byte 자료 구조에서는 배열의 전체 크기에 관계없이 모든 데이..
STL(Standard Template Library) STL은 템플릿을 사용해서 만들어진 클래스와 함수들의 모임이다. 링크드 리스트 클래스, 동적 배열 클래스, 정렬 함수, 검색 함수 등 일반적으로 많이 사용하는 클래스와 함수들이 포함된다. STL의 장점 개발자들 모두 동일한 코드를 사용한다는 점(표준)과 전문가들이 제작해 효율적이고 안전하다는 등의 장점이 있다. STL 컨테이너 STL 컨테이너는 다수의 정보를 담는 역할을 하는 클래스이다. 자주 사용하는 STL의 컨테이너 클래스는 아래의 표와 같다. 클래스 내용 vector 동적인 배열(동적으로 원소의 개수를 조절할 수 있는 배열) list 링크드 리스트 deque 배열과 링크드 리스트의 장점을 모아놓은 클래스 배열만큼 원소에 접근하는 시간이 빠른 동..