반응형

프로그래밍 노트/C&C++ 24

C++ map 간단한 사용방법

C++ map에 대한 간단한 사용방법입니다. 2021. 12. 4 - 최초작성 map은 고유의 key 값을 사용하여 값을 저장하는 컨테이너로 키값에 따라 정렬이됩니다. 다음처럼 키와 값의 타입을 지정하여 map을 선언합니다. 첫번째가 키의 타입, 두번째가 값의 타입입니다. std::map map_a; 앞에서 지정한 타입에 맞추어 키와 값을 입력해야 합니다. 배열과 유사한 방식으로 사용됩니다. 키는 인덱스로 사용되며 값은 대입되는 값입니다. map_a[1] = 300; map_a[3] = 200; map_a[2] = 100; 다음처럼 for문을 사용하여 map 원소에 접근할 수 있습니다. std::map::iterator it; for(it = map_a.begin(); it != map_a.end(); ..

C++의 vector로부터 표준편차와 평균 구하기

C++의 vector에 저장된 값으로 부터 표준편차와 평균을 구하는 예제 코드입니다. 2021. 10. 10 - 최초작성 #include #include #include #include #include using namespace std; int main() { vector v = {1, 2, 3, 4, 5}; double sum = std::accumulate(v.begin(), v.end(), 0.0); double mean = sum / v.size(); std::vector diff(v.size()); std::transform(v.begin(), v.end(), diff.begin(), [mean](double x) { return x - mean; }); double sq_sum = std::..

C++ 예제 - set을 사용하여 vector 중복 확인하기

vector 객체 중에 똑같은 값이 있는 것을 제거할 방법을 고민하다가 중복 체크가 될까 하면서 set 컨테이너에 vector 객체를 넣어봤습니다. 예상되로 잘 되네요. 2021. 9. 22 - 최초 작성 #include #include #include using namespace std; int main() { vector a1 = {1, 2, 3, 4, 5}; vector a2 = {1, 2, 3, 4, 5}; vector c1 = {1, 2, 0, 4, 5}; set s; printf("s.insert(a1) : {1, 2, 3, 4, 5}\n"); auto ret = s.insert(a1); if (ret.second) printf("삽입\n"); else printf("중복\n"); printf..

C++ set 예제 - 중복 원소 검사

C++에서 중복된 정수값을 체크할 방법을 찾다가 set 컨테이너를 사용해봤습니다. set의 insert 함수를 사용할 경우 리턴값을 체크하여 중복 여부를 확인할 수 있네요. 2021. 9. 22 - 최초작성 #include #include using namespace std; int main() { set s; auto ret = s.insert(1); printf("s.insert(1) : "); if (ret.second) printf("삽입\n"); else printf("중복\n"); ret = s.insert(1); printf("s.insert(1) : "); if (ret.second) printf("삽입\n"); else printf("중복\n"); ret = s.insert(2); pri..

C 예제 - CSV 파일 읽기

CSV 파일을 줄단위로 읽어서 공백을 제거한 후, 컬럼 별로 나누어서 출력하는 예제입니다. 다음 3곳의 코드 참고하여 작성했습니다. https://stackoverflow.com/questions/12911299/read-csv-file-in-c https://stackoverflow.com/questions/1726302/removing-spaces-from-a-string-in-c https://www.ibm.com/docs/ko/i/7.3?topic=functions-strtok-tokenize-string 2021. 7. 3 최초작성 2021. 7. 4 컬럼 2개까지만 되는 버그 수정, 구조체로 결과 받아오도록 수정 #include #include #include #define MAX_DATA 3..

C++ 배열(array)과 벡터(vector) 속도 비교

C++에서 배열(array)와 벡터(vector)의 속도를 비교해보았습니다. 테스트 환경은 Ubuntu 20.04와 Visual Studio 2019입니다. 2021. 3. 27 최초작성 아래 링크를 보고 궁금해져서 간단히 테스트를 해보았습니다. https://stackoverflow.com/questions/3664272/is-stdvector-so-much-slower-than-plain-arrays 전문적으로 관련 테스트를 진행해본 적이 없어서 정확한 방법이 아닐 수도 있는 점 감안하고 보세요. 틀린 점이나 개선점이 있으면 댓글을 남겨주세요. 시간 측정 방법은 아래 링크를 참고했습니다. https://stackoverflow.com/questions/2808398/easily-measure-elap..

C++ shared_ptr 객체를 전달받은 함수에서 사용 후 해제하는 방법

shared_ptr 객체를 전달받은 함수에서 사용 후, 자원이 해제되는지 확인한 결과입니다. 아직 C++에 익숙하지 못해서 제 맘대로 바꿔보면서 감을 익히는 중입니다. 2021. 02. 15 - 최초작성 shared_ptr 객체를 생성한 후, 함수에 객체를 전달한 후, 지역 변수에 대입해주면 자동으로 shared_ptr의 객체가 자원해제 되는줄 알았습니다. 하지만 예상과 달리 Data 클래스의 소멸자가 호출되지 않았습니다. 소멸자가 호출되었다면 “delete[] buf” 메시지가 출력되야 합니다. #include #include #include class Data { public: ~Data() { if (buf != nullptr) { delete[] buf; printf("delete[] buf\n"..

Visual Studio 2019용으로 libiconv 빌드하기 및 utf8 <-> cp949 변환 예제

Visual Studio 2019용으로 libiconv 빌드하는 방법을 다룹니다. 본 포스팅에서는 Visual Studio 2019를 사용하여 진행하지만 Visual Studio 2008, 2010, 2015, 2017 용도 준비되어 있습니다. 같은 방식으로 진행하면 될듯 보입니다. 2021. 2. 9 최초작성 1. 아래 링크에 접속합니다. https://github.com/kiyolee/libiconv-win-build 2. 오른쪽에 보이는 Releases 항목에 있는 libiconv-1.16-win-build를 클릭합니다. 3. 다운로드 받은 파일의 압축을 풀어줍니다. 4. build-VS2019 폴더에 있는 libiconv.sln을 더블 클릭하여 Visual Studio 2019를 실행합니다. 다른..

반응형