개발 161

C++ 기초 - 템플릿

템플릿서로 다른 자료형에 유연하게 대응하는 일반화된 코드를 작성하는 방법template 형식int와 double을 한 함수로 계산하는 코드#include #include using namespace std;template T add(T a, T b) { return a + b;}int main() { cout 문자열 크기 비교시에는 사전순으로 앞글자부터 비교한다.인자 중 일부만 템플릿으로 받아도 된다.#include #include using namespace std;template void printArray(T arr[], int size) { for (int i = 0; i 템플릿 클래스클래스도 템플릿으로 일반화 가능 함수 오버로딩C에서는 함수 오버로딩이 안되지만, C++ 에서는 가능함수 오버..

C++ 기초 - 자원 관리

스택 메모리변수의 생존 주기가 끝나면 선언 시 할당되었던 메모리가 자동으로 회수된다.단점일반적으로 할당 가능한 스택 메모리의 크기가 제한적변수의 스코프를 벗어나면 자동 해제되므로 메모리를 더 길가나 유연하게 관리하기 힘듦힙 메모리동적 할당 시 new 연산자를 사용하고, 해제 시 delete 연산자를 사용스택과 달리 자동으로 해제되지 않으므로 메모리 누수 등의 위험의 있음동적 할당된 객체 또는 변수의 생존 주기는 사용자가 delete로 해제할 때까지 유지new를 사용할때는 변수가 포인터형이 되어야한다.사용 뒤에는 delete로 삭제해준다.배열을 할당했다면 new int[5]처럼 선언하고, delete[]로 메모리를 해제한다.#include using namespace std;void func2() { in..

C++ 기초 - Vector, Map

#include 을 안 해도 사용 가능?IDE나 여러 요소에 따라 사용할 수 있을수도 있지만, 을 명시해주는 것이 좋다. vector 컨테이너동적 배열 역할을 함필요할 때 힙에 자동으로 메모리 할당힙에 한 줄로 저장됨CPU는 메모리에서 데이터를 가져올 때 주변 데이터도 함께 가져옴(캐시 라인, 보통 64바이트)Vector처럼 붙어있으면 캐시 히트가 빠름. 흩어져 있으면 느림.범위를 벗어나면 자동 소멸배열처럼 v[i]로 접근 가능주소 + i로 O(1)로 접근 가능UE5의 Tarray, Java의 ArrayList도 동일 구조push_back, pob_back, size, empty, insert, erease 등의 편의 기능 제공push_back() :벡터 끝에 원소 추가.pop_back() : 벡터 끝..

C++ 기초 - 객체지향 프로그래밍

C++의 클래스는 C언어의 struct를 확장하여 객체지향적 특성을 추가한 개념이다.하나의 기본 클래스를 정의하고 공통 속성을 구현하여 재사용성을 높인다. 상속상속하는 클래스의 경우는 변수를 protected로 해서 상속한 클래스가 데이터를 접근할 수 있어야함.protected는 외부 접근은 막고, 파생 클래스에서는 접근 가능private으로 설정하면 상속받은 클래스에서 접근을 못하며 public은 전체 접근 가능하므로 쓰지 않음멤버 초기화 리스트Vehicle(string c, int s) : color(c), speed(s) {} 각 인자를 변수에 넣어줌.멤버 초기화 리스트는 생성자의 코드 부분보다 먼저 실행됨.Class 호출 -> 멤버 초기화 리스트 실행 -> Class 코드 실행자식 클래스의 생성..

코딩 학습 2026.03.09

C++ 기초 - 클래스

Class 클래스는 일반적으롤 멤버 함수(동작)과 멤버 변수(데이터)로 구성된다.Class Student {int kor;int eng;int math; int getMax(){return max(max(kor, eng), math);} }; 클래스든 구조체든 선언하고 ;를 붙여줘야한다. 클래스 함수 선언 후 따로 구현하기 class Student{ double getAvg(); int kor; int eng; int math;};double Student::getAvg(){ return (kor + eng + math) / 3.0;}클래스 밖에서 함수 정의 시 함수명 앞에 Student:: 를 붙여줘야한다.클래스는 전체가 한번에 컴파일되기 때문에 변수 선언을 위에서 하든 아래에서 하든 별 상관이 없다..

C++ 기초 - 포인터와 레퍼런스

포인터 -> 값을 담지 않고 변수의 주소값을 담는다.메모리의 주소값을 알면 해당 공간을 직접 제어한다.int *p와 같이 선언된 p는 정수를 가리키는 포인터로서 int 변수의 메모리 주소를 저장한다.포인터는 선언시에 반드시 초기화해주어야한다.포인터 크기는 가리키는 자료형과 상관없이 “컴퓨터 아키텍처(32bit / 64bit)”에 따라 결정된다. 메모리 주소를 저장하기 때문이다.1️⃣ 포인터 크기시스템포인터 크기32bit4 byte64bit8 byte 복사를 할 때는 비용이 들기 때문에, 특히 배열을 복사할 때 C++에서는 값을 직접 복사하는 방식 대신 변수의 주소를 가리켜서 동일한 데이터에 접근할 수 있도록 한다. 배열 이름은 배열의 시작주소를 가지고 있다. 배열의 경우 p+1은 배열의 다음 원소 주소..

C++ 기초 - 배열, 함수

배열은 임의 접근이 가능하다.변수와 마찬가지로 배열은 선언과 동시에 초기화 및 선언 후 초기화 가능하다.int arr1[3] = {1, 2, 3};int arr2[3];arr2[0] = 10;arr2[1] = 20;arr2[2] = 30;선언과 동시에 {0}으로 초기화할 수도 있다. {1, 2}로 일부만 초기화하고 나머지는 0을 넣을 수도 있다. 선언 후에는 이렇게 초기화할 수는 없다.배열은 통째로 복사 및 대입이 되지 않는다.복사하려면 for문으로 개별 원소를 복사한다.배열의 각 원소는 변수와 동일하게 cin과 cout을 통해 입출력 가능하다.참고로 배열은 배열의 시작 주소값이지만 구조체는 값 타입으로 인식되기 때문에, 구조체는 통째로 대입이나 통째로 복사가 가능하다. 그리고 C에서는 구조체 선언 후에..

카테고리 없음 2026.03.04

C++ 기초 - Visual Studio 실행, 변수, 입출력

빈 프로젝트에서 소스파일에 main.cpp 추가해서 코딩함.리소스파일은 코드 구현에 필요한 외부 파일을 저장하는 폴더소스파일은 코드 파일을 저장하는 폴더헤더파일은 클래스 정의하는 .h 파일 저장하는 폴더. C++에서 제공하는 라이브러리와 사용자 정의가 있음. #include - C++ 라이브러리#include "사용자 라이브러리" - 사용자 정의 라이브러리는 ""안에 쓴다.cout cout은 console out으로 콘솔 출력 명령어endl은 개행 명령어 변수 변수의 타입에 따른 메모리 크기int : 4바이트double : 8바이트(부동소수점을 표시 가능한데, double이 float보다 표현 범위 및 정밀도가 더 좋다.)float : 4바이트bool : 1바이트char : 1바이트string : C+..

C - 배열

배열자료구조 중 가장 기초가 되는 자료구조.사용할 메모리 크기를 고정해서 선언선언된 후에는 크기 변경이 불가 배열 호텔배열을 호텔에 비유해봅시다. 단, 이 호텔에는 규칙이 있습니다.사용할 객실 개수를 객실 사용전에 예약해야만 합니다. 예약된 개수는 변경 불가능합니다.연속된 객실로 배정 받게됩니다.객실의 번호는 0번부터 시작합니다. 객실의 번호를 index라고 부릅니다.// 선언 방법자료형 배열명[배열크기];// 선언과 동시에 초기화 방법자료형 배열명[배열크기] = { 값0, 값1, ..., 값(배열크기-1) };// 자료형 호텔명[객실개수] = { 사람0, 사람1, ..., 사람(객실개수-1) }; 배열 관련 고찰배열의 index는 항상 0부터 시작합니다. 한국인이라면, 건물도 1층부터 시작하기에 자연수..

C 언어 연습

1. 주제별 코딩 문제 (Level 1~5)각 주제별로 단순 구현부터 구조적 사고가 필요한 문제까지 배치했습니다.① 배열 & 이중 배열기초: 10개의 정수를 입력받아 합계와 평균 출력하기.검색: 배열에서 최댓값과 그 값이 몇 번째 인덱스에 있는지 찾기.변환: 3x3 행렬을 입력받아 행과 열을 바꾼 전치 행렬(Transpose) 출력하기.통계: 5x5 이중 배열에 성적을 넣고, 각 행(학생별) 합계와 각 열(과목별) 합계 구하기.도전: 달팽이 배열 만들기 (n을 입력받아 시계방향 소용돌이 형태로 숫자 채우기).② 포인터 (Pointer)교환: swap 함수를 포인터를 이용해 구현하여 두 변수의 값 바꾸기.연산: 포인터 증감(ptr++)을 사용하여 배열의 모든 요소 출력하기.문자열: 포인터만을 사용하여 문자..