C++
(C++) 함수의 인자 또는 리턴 값에 STL 데이터 타입에 관하여
프로그래밍을 하다 보면 함수의 인자에 std::vector 등의 STL 데이터 타입을 넣는 경우가 있다. 이때 메모리 문제나 속도 문제에 대해서 생각해 필요가 있다. 값에 의한 호출 call by value void func1(std::vector v) {...} int main(){ std::vector my_v {0,0,0}; func1(my_v); } 이 경우 v는 main()의 my_v를 넘기는 순간에 값을 복사하기 때문에 메모리가 증가하게 된다. func1에서 v를 수정할 경우 main()의 my_v에 영향을 줄 수 없다. 만약에 main()에서 fun1()를 여러번 호출하게 된다면 매번 메모리가 사용될 것이다. 벡터는 상당히 큰 메모리 공간을 가질 수 있으므로 함수에 전달할 때 신중하게 고려해..
c++ regex 정규 표현식
정규 표현식 소개 #include C++ 11부터 사용 가능 regex는 문자열을 다루는데 유용한 문법이다. 문자열을 파싱할 때 원하는 형식들이 있을 것이다. 숫자, 숫자중 일부 , 특수문자, 영어, 영어가 아닌 문자 등등을 다루는데 아주 유용하다. 정규 표현식 사용법 참고 : https://docs.microsoft.com/ko-kr/cpp/standard-library/regex?view=msvc-170 정규식 검색에 사용되는 객체 std::regex -char basic_regex에 대한 형식 정의 std::smatch -string match_results에 대한 형식 정의 std::ssub_match -string sub_match에 대한 형식 정의 std::cregex_iterator -cha..
1000000007, 1000000009 해로운 숫자?
1000000007(1e9+7), 1000000009(1e9+9)에 대해 문제 중에서는 어떤 값으로 나눈 나머지를 출력 또는 반환값으로 요구하는 경우가 많다. 어떤 값의 대표적인 값이 1e9+7 , 1e9+9이다. 1e9+7 , 1e9+9 사용하는 이유 ## 1. int와 long long의 범위를 생각해봅시다. C/C++에서 수의 표현은 사실 매우 제한적입니다. 가장 많이 사용하는 정수 자료형인 int와 long long를 봅시다. - int는 4바이트(32비트)로 -2^31에서 2^31-1만큼 표현할 수 있습니다. 이는 -2147483648 ~ 2147483647입니다. 이는 2e9로 근사할 수 있습니다. - long long은 8바이트(64비트)로 -2^63에서 2^63만큼 표현할 수 있습니다. 이..
if문 속 비교연산에서 순서의 비밀
if문 작성 시 무심코 순서를 생각하지 않고 비교 연산을 하게 된다면 문제가 생길 가능성이 크다. 이유 if문내의 모든 논리연산은 앞의 논리부터 뒤의 논리까지 순차적으로 연산한다. || 연산에서 순차적으로 앞의 논리가 참이 된다면 더 이상 연산하지 않는다. && 연산에서 순차적으로 앞의 논리가 거짓이라면 더 이상 연산하지 않는다. -> 연산을 끝까지 하지 않는 경우가 있다. 코드 int a=0, b=0, c=0; if( a == b || c++ > a ) std::cout
C++) Container비교
특징은 무엇이고 문제를 풀고자 할 때 어떤 컨테이너를 선택해야 할까? 순차 컨테이너 vector 임의 접근 가능, 순차 접근 가능 뒤에서 삽입, 삭제가 빠름 크기 변경 가능 각 요소를 메모리 상 연속적으로 저장 메모리 동적으로 할당 (내부 capacity가 고갈될 시 전체 메모리 크기만큼 재할당 발생) deque 임의 접근 가능 앞과 뒤에서 삽입과 삭제 빠름 크기 변경 가능 Vector와 다르게 각 요소들이 메모리 상에 연속적으로 저장되지 않고, 각 node는 개별적인 메모리를 할당 내부 capacity가 고갈될 시 일정 크기를 가지는 chunk 단위로 확장됨( 저장 원소가 많고 메모리 할당량이 큰 경우 Vector에 비해 확장 비용이 절감되지만, 컨테이너 처음부터 끝까지 연속 메모리 공간이 아니므로, ..