이 글에서는 C++를 사용하여 텍스트 파일을 읽는 방법을 알아봅니다. fstream 클래스를 활용하면 파일에 데이터를 쓰고, 저장된 내용을 다시 읽어올 수 있습니다.입력tpoint.txt 파일의 초기 내용은 다음과 같습니다.“Tutorials point.”출력Tutorials point.알고리즘텍스트 파일을 읽는 전체 과정은 다음 단계로 진행됩니다.파일 스트림 객체 생성 – fstream 클래스의 객체 newfile을 생성합니다.쓰기 모드로 파일 열기 – open() 메서드를 호출하여 &l
이 글에서는 두 개의 텍스트 파일에 저장된 내용을 읽어 하나의 세 번째 파일로 합치는 C 프로그램을 소개합니다. 파일 입출력의 기본 원리를 이해하는 데 도움이 되는 대표적인 예제입니다. 먼저 실행 결과부터 살펴보겠습니다. 입력 java.txt에는 초기 내용 Java is a programing language.가 저장되어 있음 kotlin.txt에는 초기 내용 kotlin is a programing language.가 저장되어 있음 ttpoint.txt는 초기 내용이 비어 있음 출력 files are merged ttpoint.
이 글에서는 C++ 프로그램을 작성하여 텍스트 파일에 저장된 데이터를 읽어 오는 방법을 알아봅니다. 파일 입출력은 fstream 클래스를 활용하면 간단하게 구현할 수 있습니다.입력tpoint.txt 파일의 초기 내용: Tutorials point.출력Tutorials point.알고리즘프로그램의 동작 순서는 다음과 같습니다. fstream 클래스의 객체 newfile을 생성합니다. open() 메서드를 호출하여 tpoint.txt 파일을 쓰기 모드(ios::out)로 엽니다. 파일이 정상적으로 열렸다면 문자열 Tutorials po
C++ 프로그래밍에서 파일 입출력은 가장 기본적인 작업 중 하나이며, 그중에서도 텍스트 파일의 내용을 한 줄씩 읽어오는 방법은 로그 분석, 설정 파일 파싱, 대용량 데이터 처리 등 다양한 상황에서 활용됩니다. 이 글에서는 fstream 클래스와 getline() 함수를 이용해 파일을 한 줄씩 읽는 프로그램을 단계별로 살펴봅니다. 입력 tpoint.txt 파일에는 초기 내용으로 “Tutorials point.”가 저장되어 있습니다. 출력 Tutorials point. 알고리즘 시작 fstream 클래스의
C++ 파일 처리에서 tellp() 함수는 출력 스트림(output stream)과 함께 사용되며, 스트림 내 쓰기 포인터(put pointer)의 현재 위치를 반환하는 함수입니다. 반환값은 정수 계열의 데이터 타입으로, 스트림 포인터가 현재 가리키고 있는 위치를 나타냅니다.tellp() 메서드는 별도의 매개변수를 받지 않으며, 다음과 같은 형식으로 선언됩니다.pos_type tellp();동작 알고리즘시작. fstream 클래스의 객체 newfile을 생성한다. open() 메서드를 호출하여 객체 newfile로 t
C 언어의 tmpfile() 함수는 바이너리 업데이트 모드(binary update mode)로 임시 파일을 생성하는 표준 라이브러리 함수입니다. 이 함수는 stdio.h 헤더 파일에 선언되어 있으며, 임시 파일 생성에 실패하면 항상 NULL 포인터를 반환합니다.tmpfile()로 생성된 임시 파일은 프로그램이 종료되는 순간 자동으로 삭제되기 때문에, 개발자가 별도로 파일을 지우지 않아도 된다는 큰 장점이 있습니다. 따라서 중간 계산 결과를 저장하거나 일시적으로 데이터를 보관해야 할 때 매우 유용하게 활용됩니다.문법 (Syntax)
C++의 std::vector는 동적 배열처럼 동작하며, 요소가 삽입되거나 삭제될 때 컨테이너가 저장 공간을 자동으로 관리합니다. 하지만 많은 개발자가 혼동하는 부분이 바로 resize()와 reserve()의 차이입니다.핵심 차이를 먼저 요약하면 다음과 같습니다.resize(): 벡터의 실제 크기(size)를 변경합니다. 지정한 값이 현재 크기보다 작으면 초과분의 메모리를 해제하고 요소를 삭제합니다.reserve(): 벡터의 실제 크기는 그대로 두고, 최소한 지정한 개수만큼의 요소를 담을 수 있도록 용량(capacity)만 미리
C++의 vector는 동적 배열처럼 동작하는 컨테이너로, 요소가 삽입되거나 삭제될 때 크기를 자동으로 조절합니다. 내부 저장 공간 역시 컨테이너가 알아서 관리해 주기 때문에 개발자가 직접 메모리를 관리할 필요가 없습니다.그렇다면 resize()와 reserve()는 어떤 점이 다를까요? 핵심적인 차이는 resize()는 벡터의 실제 크기(size)를 변경하지만, reserve()는 크기를 전혀 변경하지 않는다는 점입니다. reserve()는 메모리를 재할당(reallocate)하지 않고도 최소한 지정한 개수만큼의 요소를 담을 수
포인터(pointer)는 다른 변수나 메모리 블록의 주소, 즉 메모리 위치의 직접적인 주소를 값으로 가지는 변수입니다. 일반 변수나 상수와 마찬가지로, 포인터를 사용해 변수나 블록의 주소를 저장하기 전에는 반드시 선언해야 합니다.문법C 언어에서 포인터는 다음과 같은 형식으로 선언합니다.Datatype *variable_name알고리즘함수 포인터를 활용하는 기본적인 알고리즘은 다음과 같습니다.시작. show 함수를 정의합니다. 정수형 변수 x를 선언합니다. 변수 x의 값을 출력합니다. 정수형
C++에서 기본 클래스(base class)와 파생 클래스(derived class)의 예외를 모두 처리하려면 반드시 파생 클래스의 catch 블록을 기본 클래스의 catch 블록보다 먼저 작성해야 합니다. 그렇지 않으면 파생 클래스의 catch 블록은 결코 실행되지 않습니다.그 이유는 C++ 컴파일러가 catch 블록을 위에서부터 차례대로 검사하고, 파생 클래스 객체는 기본 클래스 타입으로 암시적 형 변환(업캐스팅)이 가능하기 때문입니다. 따라서 기본 클래스의 catch 블록이 먼저 위치하면 파생 클래스의 예외까지 모두 가로채 버
C++에서 소멸자(Destructor)는 개체가 소멸되어 시스템에 메모리를 반환할 때 호출됩니다. 클래스 내부에서 예외가 발생하면, catch 블록이 실행되기 전에 이미 생성된 개체들의 소멸자가 자동으로 호출됩니다. 이 과정을 스택 풀기(stack unwinding)라고 부르며, C++ 예외 처리의 핵심 동작 방식입니다. 핵심 동작 원리 예외가 던져지는 순간 프로그램은 현재 스코프를 벗어나면서, 그 시점까지 완전히 생성된 모든 지역 개체의 소멸자를 역순으로 호출합니다. 여기서 중요한 규칙이 하나 있습니다. 바로 생성자 안에서 예외가
이 글에서는 C++를 사용하여 정렬된 pair 벡터에서 이진 탐색(Binary Search)을 구현하는 방법을 단계별로 살펴봅니다. 핵심 개념 이진 탐색은 정렬된 자료구조에서 원하는 값을 O(log n)의 시간 복잡도로 빠르게 찾는 알고리즘입니다. C++ 표준 라이브러리(STL)는 <algorithm> 헤더의 binary_search() 함수를 제공하며, 이 함수는 탐색 범위와 찾으려는 값, 그리고 선택적으로 비교 기준을 인자로 받습니다. pair<int, int>처럼 두 개의 값을 담는 요소를 다룰 때는 일반
이 글에서는 두 벡터의 외적(Cross Product)을 계산하는 C++ 프로그램을 소개합니다. 먼저 두 개의 3차원 벡터가 다음과 같이 주어져 있다고 가정해 보겠습니다. M = m1·i + m2·j + m3·kN = n1·i + n2·j + n3·k 이때 두 벡터의 외적은 아래와 같이 정의됩니다. 외적 = (m2·n3 − m3·n2)·i + (m1·n3 − m3·n1)·j + (m1·n2 − m2·n1)·k 여기서 m2·n3 − m3·n2, m1·n3 − m3·n1, m1·n2 − m2·n1은 각각 i, j, k 방향 단위 벡터
C++에서 부분 벡터(subvector)란 기존 벡터에 들어 있는 요소 중 일부만을 담고 있는 새로운 벡터를 의미합니다. 이 글에서는 std::vector가 제공하는 범위 기반 생성자와 반복자(iterator)를 활용하여, 벡터의 특정 구간을 잘라내어 새로운 벡터를 만드는 방법을 알아보겠습니다. 핵심 아이디어 std::vector는 시작 반복자와 끝 반복자 두 개를 인자로 받는 생성자를 제공합니다. 이 생성자를 사용하면 원본 벡터의 특정 범위에 해당하는 요소들을 그대로 복사한 새로운 벡터를 간단하게 만들 수 있습니다. v.begi
벡터(Vector)는 C++ STL(표준 템플릿 라이브러리)이 제공하는 대표적인 시퀀스 컨테이너로, 동적 배열처럼 동작합니다. 요소가 삽입되거나 삭제되면 벡터가 스스로 크기를 자동으로 조절하며, 내부 저장 공간 역시 컨테이너가 알아서 관리해 줍니다. 벡터의 요소들은 메모리상에 연속적으로 배치되므로, 인덱스 연산자([])뿐 아니라 반복자(iterator)를 통해서도 빠르게 접근하고 순회할 수 있습니다. 데이터의 삽입과 삭제는 벡터의 시작 위치, 중간, 끝 어디에서든 가능하지만, 일반적으로는 끝에 요소를 추가하는 push_back()이
C++에서 하나의 벡터를 다른 벡터에 추가(append)하는 작업은 insert() 메서드를 사용하면 간단하게 처리할 수 있습니다. 이 메서드는 지정한 위치에 다른 벡터의 요소들을 삽입하는 기능을 제공합니다.알고리즘시작 show() 함수를 선언한다. show() 함수 내부에 벡터의 const 참조를 매개변수로 전달한다. for (auto const& i : input) 변수 i의 값을 출력한다. vector 타입의 vect1을 선언한다. vect1에 값을
C++에서 벡터(vector)는 동적 배열을 손쉽게 다룰 수 있는 STL 컨테이너입니다. 벡터는 다양한 방식으로 초기화할 수 있으며, 상황에 맞는 방법을 선택하면 코드의 가독성과 효율성을 높일 수 있습니다. 이 글에서는 대표적인 4가지 초기화 방법을 예제 코드와 함께 살펴보겠습니다.1) push_back() 메서드로 벡터 초기화하기가장 기본적인 방법은 빈 벡터를 선언한 뒤 push_back() 함수를 사용해 요소를 하나씩 추가하는 것입니다.알고리즘Begin Declare v of vector type. Call pus
C++에서 std::vector의 요소를 무작위로 섞으려면 Fisher-Yates 셔플 알고리즘을 사용할 수 있습니다.이 알고리즘은 벡터를 선형으로 한 번 훑으면서, 각 요소를 자기 자신을 포함한 나머지 요소들 중에서 무작위로 선택한 요소와 서로 맞바꾸는(swap) 방식으로 동작합니다. 이 방식은 모든 순열이 동일한 확률로 나타나도록 보장하며, 시간 복잡도는 O(n)으로 매우 효율적입니다.알고리즘시작 show() 함수를 선언한다. show() 함수에 벡터의 const 참조를 매개변수
C++ 벡터(vector)에 담긴 모든 요소의 합계는 std::accumulate 함수를 사용하면 매우 간단하게 구할 수 있습니다. 이 함수는 <numeric> 헤더 파일에 정의되어 있으며, 벡터에 저장된 모든 값을 지정한 초기값부터 순차적으로 누적하여 전체 합계를 계산합니다.알고리즘시작 vector 타입의 v를 선언한다. 배열 형태로 v 벡터에 초기값들을 넣는다. 모든 요소의 합계는:을 출력한다. accumulate(v.begin(), v.end(), 0)을 호출하여 v 벡터의 모든
이 글에서는 C++에서 벡터(vector)를 클래스의 생성자에 전달하는 방법을 간단한 예제를 통해 알아보겠습니다. 벡터를 생성자의 매개변수로 넘겨 멤버 변수를 초기화하면, 객체가 생성되는 시점에 데이터를 함께 설정할 수 있습니다.알고리즘시작 Vector라는 이름의 클래스를 선언한다. vector<int> 타입의 멤버 변수 vec를 선언한다. Vector 클래스의 생성자를 선언한다. 벡터 객체 v를 매개변수로 생성자에 전달한다. vec = v 로