본문 바로가기
반응형

전체 글454

C++ Static 정적 클래스, 정적 멤버, static 변수, static함수 [C++] Static 정적 클래스, 정적 멤버, static 변수, static함수static 키워드는 4가지 유형으로 사용될 수 있다.함수의 정적 변수 (Static variable in functions, static 변수)정적 클래스 객체 (Static class objects, static 클래스)클래스 내부의 정적 멤버 변수 (Static member variable in class, static 멤버 변수)클래스 내부의 정적 함수 (Static methods in class, static 멤버 함수)static변수는 처음 실행할 때 딱 한 번 초기화 된다.프로그램 시작시 할당되고 종료시 해제된다.함수의 정적 변수 (Static variable in functions, static 변수)프로그.. 2022. 12. 20.
메모리 구조 (코드영역, 데이터영역, 힙영역, 스택영역) 메모리 구조 (코드영역, 데이터영역, 힙영역, 스택영역) 흔히 메모리라고 하면 RAM을 지칭한다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같다. 코드(code) 영역 데이터(data) 영역 스택(stack) 영역 힙(heap) 영역 코드(code) 영역 메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역이다. 데이터(data) 영역 메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 스택(stack) 영역 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과.. 2022. 12. 20.
C++ 구조체와 클래스의 코드로보는 차이점 [C++] 구조체와 클래스의 코드로보는 차이점구조체 보기// 구조체 테스트#include using namespace std;struct _struct{ // struct의 기본 접근 지정자는 public double _double = 3.141592; // 8 byte // 되도록이면 큰 자료형이 위로 오도록 (바이트패딩) int _int = 3; // 4byteprivate : // 접근지정자의 사용이 가능함 int _pvInt = 6; // 4byte void PrivateAccessTest() { cout 구조체 struct의 기본 접근 지정자는 public이다.바이트 패딩의 효율성을 위해 큰 자료형을 위에 선언한다.클래스처럼 접근지정자 사용이 가능하다.protected접근지정자는 상속관계.. 2022. 12. 20.
C++ 바이트 패딩 (Byte Padding) [C/C++]바이트 패딩 (Byte Padding)바이트 패딩(Byte Padding)이란 클래스 (구조체)에 바이트를 추가해 CPU접근에 부하를 덜어주는 기법padding 의 사전적 정의 : (형체를 잡기 위해 안에 대는) 속, 충전재구조체나 클래스의 크기는 내부에 선언된 변수들의 크기로 결정된다고 생각되지만 실제 크기를 확인해 보면 대부분 내부에 선언된 변수 크기보다 더 큰 크기의 공간이 할당되어 있다. 이는 CPU접근을 용이하게 만들기 위한 것인데 32bit CPU는 한 번에 4byte를 읽을 수 있고 64bit CPU는 한 번에 8byte를 읽을 수 있다. 만약 int(4byte)자료형 사이에 char(1byte)자료형이 끼어 있다면 패딩이 없을 경우 CPU는 1byte로 인한 격차로 인해 2번의.. 2022. 12. 14.
C++ 구조체 (structure type) [C/C++] 구조체 (structure type)구조체란 사용자가 새롭게 정의할 수 있는 사용자 정의 타입이다.구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다.구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이다.구조체를 구성하는 변수를 구조체의 멤버(Member) 또는 멤버 변수(Member Variable)이라고 한다.구조체 안에 있는 것들 중 가장 큰 자리를 가지고 있는 타입이 기준 크기가 된다. (바이트패딩)구조체 정의 방법구식 컴파일러 버전에서는 struct 앞에 typedef를 넣어줘야 한다.typedef struct 구조체이름 구조체의새로운이름;구식 컴파일러 버전에서는 구조체 멤버변수를 선언할 때 초기화해줘야 한다.// 구버전typedef struct.. 2022. 12. 14.
C++ 파일 입출력 fstream ifstream ofstream (char배열, string) [C++] 파일 입출력 fstream ifstream ofstream (char배열, string) 띄어쓰기 포함 쓰기 방법은 한 줄 입력 받는 것이다char배열을 써도 되고 편리한 string을 사용해도 된다.#include #include 파일 입출력 헤더파일 #include 문자열 헤더파일만약 입력이나 출력만 할 경우#include 입력 (Input File Stream)#include 출력 (Output File Stream)//방법 1ofstream file;file.open(filePath, ios::out);//방법 2ofstream file(filePath, ios::out) 파일을 열지 못했을 때 예외처리// 예외처리 1if(file.fail()) cout #include #in.. 2022. 12. 14.
C++ 타입(형) 변환 (Type conversion, Type Casting) [C/C++] 타입(형) 변환 (Type conversion, Type Casting) 자료형 변환이란 char형을 int로 바꾸거나 int를 double로 바꾸는 식으로 자료형 타입을 바꾸는 것을 말한다.C언어에서 다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후에 수행된다.이처럼 하나의 타입을 다른 타입으로 바꾸는 행위를 타입 변환(type conversion)이라고 한다.타입 변환은 크게 두 가지 방식으로 나눌 수 있다.묵시적 타입 변환(자동 타입 변환, implicit type conversion)명시적 타입 변환(강제 타입 변환, explicit type conversion)묵시적 타입 변환(자동 타입 변환, implicit type conversion)컴파일러가 자동으로 실.. 2022. 12. 14.
C++ 한글 문자, 한글 문자열 출력 wchar_t [C/C++] 한글 문자, 한글 문자열 출력 wchar_t기존 char 형식은 ASCII 코드를 표현할 수 있는 문자 형식이다.ASCII코드는 128가지의 문자를 표현하므로 1byte의 크기로 다 표현 가능하다.하지만 한글을 표현하기에는 1byte크기로 부족하다. 2byte형식의 자료형이 필요한데, 그 크기를 지원하는 데이터 형식이 wchar_t이다. 기존 char 형식으로 한글 문자를 출력하게 된다면 컴파일러는 ‘ㄱ’의 시작 주소부터 2byte를 읽어 엉뚱한 문자를 출력하게 될 것이다.#include //표준 입출력 헤더int main(){ char ch = 'ㄱ'; printf("%c\n", ch); return 0;}2011년 ISO(국제 표준화 기구)에서 각 지역에 맞는 언어.. 2022. 12. 13.
C++ STL 컨테이너 Vector의 재할당 확인하기 [C++/STL] 컨테이너 Vector의 재할당 확인하기 컨테이너는 공간이 부족하면 자동으로 공간을 재할당 한다.크기를 정해놓지 않고 사용하는 경우가 많은데 Vector에 자료가 추가되면서 재할당 하는 빈도수가 많은 것을 확인하였다. #include #include using namespace std;int main(){ vector vec; vector::iterator vecIter; vec.push_back(0); vecIter = vec.begin(); cout 실행 결과를 보면0번 데이터를 넣을 때의 주소는 00000149BB61D950 이다. 하지만 데이터를 추가하고 나서 주소가 빈번하게 바뀌는 것을 알 수 있다.1번 째 반복 0 : 00000149BB6203D0 1 : 00000149BB62.. 2022. 12. 11.
C++ STL List의 저장 공간 [C++/STL] List의 저장 공간 List는 양방향 연결 구조를 가지고 있다.데이터를 뒷 부분에 추가할 때 다음과 같은 일이 일어난다.1. 6번에 데이터를 추가한다.2. 빈 공간(임의 7번)을 찾는다.3. 6번에 2번에서 찾은 7번의 주소를 연결한다.4. 7번에 6번 주소를 연결한다.5. 7번을 마지막 원소로 지정한다.따라서 리스트는 빈 공간을 계속 찾아 연결하기 때문에 연속된 공간에 할당이 되지 않는다.예제로 확인한다.#include #include using namespace std;int main(){ list _list; list::iterator listIter; _list.push_back(0); listIter = _list.begin(); for (int i = 0; i 2022. 12. 11.
C++ STL 반복자(iterator) 사용법 [C++/STL] 반복자(iterator) 사용법iterator 는 포인터다.컨테이너에 저장되어 있는 원소들을 공통적인 방법으로 하나씩 접근할 수 있게 해준다.모든 컨테이너들은 iterator를 지원한다.  선언 방법STL타입::iterator 이름;vector::iterator veciter;vector::const_iterator veciter; vector.begin() = 시작 주소를 가리킴vector.end() = 제일 마지막 다음 값을 가리킴#include #include #include #include using namespace std;int main(){ vector vec; deque deq; list _list; vector::iterator vecIter; deque::iterato.. 2022. 12. 11.
C++ STL 컨테이너(Container) 사용법 [C++/STL] 컨테이너(Container) 사용법컨테이너 구성 요소1. 연속 컨테이너(Sequence Container) : 정렬되지 않은 컨테이너     - 벡터 (Vector), 디큐(Deque), 리스트(List)2. 연관 컨테이너(Associative Container) : 정렬 된 컨테이너      - 셋(Set), 멀티셋(MultiSet), 맵(Map), 멀티맵(MultiMap),         순서가 정해지지 않은(Unordered set, multiset, map, multimap)3. 컨테이너 어댑터(Container Adapter) : 컨테이너 위에서 돌아가는 자료구조      - 스택(Stack), 큐(Queue), 우선순위큐(Priority_Queue)  1. 연속 컨테이너(Se.. 2022. 12. 11.
반응형