본문 바로가기

Language/C C++

[C/C++] 소켓 프로그래밍 [C/C++] 소켓 프로그래밍 오류윤성우의 열혈 TCP/IP 소켓 프로그래밍 책을 보고 소켓 통신을 실습할 때 코드를 그대로 쓰면 실행이 잘 안된다. 실행하며 나온 오류를 잡아봤다.환경 : Window10, visual studio 2015LNK2019 에러소스코드를 그대로 복붙하고 빌드하면 LNK2019에러가 나온다.#pragma comment(lib, "ws2_32.lib") 를 추가하면 빌드가 잘 되고 실행된다.클라이언트 연결도 안했는데 Accept 처리C++로 혼합개발할 경우 발생했던 문제이다. 원인은 #include을 포함하고 using namespace std를 썼을 때 생긴다. std::bind와 WinSock2의 bind의 이름 충돌로 발생한다. using namespace std 사용의 ..
[C/C++] const keyword [C/C++] const keywordconst 키워드를 적절히 사용할 수 있으면 유용하다. 코드 작성 중 발생할 수 있는 실수를 컴파일 단계에서 확인가능하기 때문에 활용하면 좋다. const의 개념은 간단하다. 이 키워드를 통해 선언되면 프로그램 실행 중 변경할 수 없음을 지정한다. 이를 통해 할 수 있는 기능 중 하나는 상수 지정이다. 상수를 지정하는 다른 방법은 #define을 이용하는 것이다. const는 #define보다 이점을 가지고 있다. 먼저 #define을 사용할 경우는 단순 대체만 수행하기 때문에 타입 확인을 할 수 없는 반면 const를 사용하면 컴파일러에서 확인이나 검사가 가능하다. 또한 const변수를 이용하면 디버거에서 변수를 이용할 수 있어 디버깅에 유용하다.포인터와 const..
[C++]optional [C++]optional [C++]optionalC++17의 표준으로 optional이 도입되었다. 이전에 자바 스프링 개발을 할 때도 본적이 있었는데 C++에서 보니 반갑다. 자바는 jdk1.8부터 optional 지원이 된것으로 알고있다. 그러면 이 optional은 무엇일까?함수를 작성하는 예시를 들어보자. 두 INT값을 나누어 결과를 반환하는 함수를 작성하려고 한다.double divide(int a, int b) { return (double)a / b;}만일 이 함수에 인자 b에 0이 주어진다면 exception이 발생할 것이다. 따라서 b == 0일 경우 실패했다는 결과값을 반환해야 한다. xxxxxxxxxxdouble divide(int a, int b) { if (b == 0) { //f..
아이템선택 아이템 선택x#include#include#include#include#include​using namespace std;​struct Table{ struct Item { int id; int weight; };​ vector table;};​int select(const Table& table, int w) { int randomNum = rand() % (w + 1);​ int sum = 0; for (auto it : table.table) { sum += it.weight; if (randomNum
중복 없는 난수 생성 중복없는난수생성 난수생성함수 랜덤한 수 즉 난수를 생성하기 위해서는 rand함수를 사용한다. xxxxxxxxxx#include#include //rand()#define SIZE 5int main (){ for(int i = 0 ; i
정렬 정렬 정렬정렬이란 사용자가 원하는 순서대로 원소들을 배치하는 것이다. 정렬을 할 수 있는 자료구조에는 배열, 리스트, 그래프가 있다. 정렬은 종류에 따라 속도의 차이가 있다. 아래의 영상을 보면 각각의 정렬 알고리즘들이 정렬을 하는데 걸리는 속도를 한눈에 볼 수 있다.@동영상오늘 우리는 속도가 N^2인 정렬 알고리즘을 공부할 것이다. 먼저 버블정렬을 살펴보자. 버블정렬은 인접한 두 원소를 비교해 나가면서 가장 큰 원소를 뒤로보내는 정렬은 해나가는 정렬이다. 이 때 작업을 n-1번 반복하는데 이유는 n-1번째에는 n번째 역시 정렬되있기 때문이다.xxxxxxxxxxvoid BubbleSort(int* arr, int size){ int i, j; int temp; for( i = 0 ; i
시간 측정 시간측정방법 어느 정렬이 얼마나 빠른지 알고싶다. 프로그램 내에서 시간이 얼마나 지나는지 측정하는데 clock함수를 사용한다. clock 함수는 호출된 시점의 시간을 반환하는 함수이다. 우리를 이를 이용하여 시간측정을 할 수 있다. clock 함수로 시작시간을 구하고연산이 끝난뒤 다시 clock함수를 호출한다.2에서 1을 빼면 얼마나 시간이 지났는지 측정할 수 있다.#include#include // clock()int main (){ double start = clock(); // 측정시작 /*************/ /* 연산내용 */ /*************/ double end = (clock()-s) / CLOCKS_PER_SEC; //초 단위로 표시하기 위해 CLOCKS_PER_SEC을 나누..