프로그래밍 언어

    [실4] 28279 - 덱2

    #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; deque dq; while(n--) { int o, t; cin >> o; if (o == 1) { cin >> t; dq.push_front(t); } else if (o == 2) { cin >> t; dq.push_back(t); } else if (o == 3) { if (dq.empty()) cout

    [C++] emplace_back 과 push_back 의 차이

    item 타입의 생성자가 타입을 인자로 받는다면? push_back 함수는 '객체' 를 집어 넣는 형식으로, 객체가 없이 삽입을 하려면 "임시객체 (rvalue) " 가 있어야 하거나 암시적 형변환이 가능하다면, 인자로도 삽입할 수 있다. ( 이는 인자를 통해 임시객체를 암시적으로 생성한 후 삽입한다 ) vector vt; item a = {}; // 기본 생성자 호출 vt.push_back(item("abc", 1, 234)); vt.push_back(std::move(a)); vector v; v.push_back(1); // 등등.. 1. push_back을 통해 객체를 삽입하기 위해, item 임시 객체를 하나 만든다. 2. 임시 객체를 복사 생성자를 통해 push_back 함수 내에서 임시 객체..

    [C#] event (이벤트) 개념

    이벤트는 클래스내에 특정한 일(event)이 있어났음을 외부의 이벤트 가입자(subscriber)들에게 알려주는 기능을 한다. C#에서 이벤트는 event라는 키워드를 사용하여 표시하며, 클래스 내에서 일종의 필드처럼 정의된다. 이벤트에 가입하는 외부 가입자 측에서는 이벤트가 발생했을 때 어떤 명령들을 실행할 지를 지정해 주는데, 이를 이벤트 핸들러라 한다. 이벤트에 가입하기 위해서는 += 연산자를 사용하여 이벤트핸들러를 이벤트에 추가한다. 반대로 이벤트핸들러를 삭제하기 위해서는 -= 연산자를 사용한다. 하나의 이벤트에는 여러 개의 이벤트핸들러들을 추가할 수 있으며, 이벤트가 발생되면 추가된 이벤트핸들러들을 모두 차례로 호출한다. 다음 코드는 클래스(MyButton) 내에서 이벤트(Click)를 정의하고..

    [C] 배열과 포인터의 관계 (변수형 포인터, 상수형 포인터), 포인터로 배열 변경하기

    포인터는 크게 상수형 포인터와 변수형 포인터로 나뉠 수 있다. 결론부터 말하자면, 배열을 선언하는 변수는 "상수형 포인터" 그 외는 "변수형 포인터"이다. 배열 선언시 char arr[ ]; 이런식으로 선언하는데 실제 arr 은 상수형 포인터다. 즉 주소값을 알고있는 Lable이다. 그래서 char * arr; 이랑 똑같은 구조라 할 수 있지만, * 로 선언하면 "변수"로 선언했기 때문에 포인터 변수의 주소값을 바꿀 수 있고, char arr [ ] 으로 선언하면 상수이므로 그 주소를 바꿀 수 없다. 그리고 이 arr은 내 첫번째 배열값의 주소를 가리키고 있다. (이때 arr의 자료형이 무엇이냐? 하면 포인터이므로 char * 자료형이다 라고 한다.) - int arr[ ]; 으로 선언하면 int형크기(..

    [C] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기)

    문자열(string)이란, 알파벳 하나하나가 메모리상의 연속적으로 나열되며, 마지막에는 '\0' (NULL)으로 끝나는 배열이다. 위 그림과 같이 문자열을 만드는 방법은 아래와 같다. char string[11] = "hello world"; char이므로 한칸당 1byte를 사용하며, "~~"문자열 맨 뒤에 \0 (NULL)문자는 자동으로 들어가게 된다. 고로 띄어쓰기를 포함한 모든 문자들 공간과 마지막의 NULL이 들어갈공간을 포함해 11개의 공간을 선언했다. C언어로 문자열을 표현하는 방법은 대표적으로 배열선언과 포인터 선언이 있다. 배열도 "상수형 포인터"로 결국 포인터와 동일한 역할을 한다. 배열으로 선언하는 방법은 메모리공간을 미리 할당하는 방법과, 컴파일러가 문자열 길이를 보고 알아서 할당시..

    [C] 문자열(string) 입출력 (puts, fputs, gets, fgets) 사용법

    문자열 출력 함수로 : puts, fputs 가 있다. 출력 함수 puts - 함수 원형: int puts(const char * string) - 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함. - int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다. - 자동으로 문자열 맨뒤 '\n' 개행이 붙는다. - char * 이므로 메모리상의 특정 문자열의 주소값이 그데로 전달 됨을 알 수 있다. 출력 함수 fputs - 함수 원형: int puts(const char * string, FILE * stdout) - 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signe..

    [C] open, close, read 함수에 대하여

    파일 디스크립터(File Descriptor)란? 리눅스와 유닉스에서는 시스템을 전부 파일로 처리하여 관리한다. (하드웨어 등 모든 장치도 포함) 시스템에서 프로세스가 파일에 접근하기 위한 방법으로 파일 디스크립터(FIle Descriptor)라는 핸들이 필요하다. 해당 파일을 open할때( 해당파일에 접근할 때 ) 파일 디스크립터는 0부터 N까지 즉, 음수가 아닌 0부터 차례대로 숫자를 부여받으며, 0, 1, 2는 프로세스가 메모리에서 실행을 시작할때 기본적으로 할당되는 파일 디스크립터이다. 기본적으로 할당받는 파일 디스크립터 0번 : 표준 입력(Standard Input) / STDIN_FILENO 1번 : 표준 출력(Standard Output) / STDOUT_FILENO 2번 : 표준 에러(St..

    [C] 이스케이프 문자(Escape Character)

    C/C++의 이스케이프 문자(Escape Character) 또는 이스케이프 시퀀스라 부른다. 백슬래시(\)와 특정문자(알파벳,',? 등)를 결합하여 언어특성상 표현할 수 없는 기능, 문자를 표시해준다. 백슬래시는 \이지만 키보드에는 백슬래시가 없고 ₩로 대체한다. \와 ₩는 같은 의미이니 참고 바람 https://arer.tistory.com/95

    [C++] 쓰레기값 거르기(아주 작은값) numeric_limits

    numeric_limits 클래스 template class numeric_limits epsilon 함수는 1과 데이터 형식에 대해 나타낼 수 있는 1보다 큰 가장 작은 값 사이의 차이를 반환 // numeric_limits_epsilon.cpp // compile with: /EHsc #include #include using namespace std; int main( ) { cout

    [C] 쓰레기값과 초기화

    쓰레기 값이란? C언어에서 변수를 선언하면 어떠한 메모리 공간을 할당받는 것이다. 그렇다면 그 메모리 공간 안의 상황은 할당받을 당시 어떤 상황일까? 어디서 어떠한 의도로 그 메모리 공간이 사용되고 있었는지 모르기 때문에 그 안에는 의미 없는 값이 들어가 있는데 이러한 값들을 바로 쓰레기 값이라고 한다. 실제로 쓰레기 값이 들어있는지 한번 확인해 보도록 하자 int main() { int a; printf("%d\n", a); return 0; } 다음과 같은 에러가 발생한다. 왜 쓰레기 값이 존재하는가? 사용자들이 생각하기에는 그렇다면 변수를 선언과 동시에 초기화를 시킨다면 쓰레기값이 없을 텐데 왜 C언어에서는 그런 방향을 만들지 않았을까 하는 의문이 생길 수 있습. 이 이유는 연산의 증가가 발생하기 ..