글

{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[C++] 스터디 CPPALOM 11주차: 뇌를 자극하는 C++ STL Chap 10~12

파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>11주차 – 뇌를 자극하는 C++ STL Chap 10~12 한수빈 # <br>반복자의 종류 * 반복자는 포인터를 추상화한 클래스 객체이다. 다음 다섯 가지의 반복자가 있다: * 입력 반복자(input iterator): 전방향 읽기(istream) * 출력 반복자(output iterator): 전방향 쓰기(ostream) * 순방향 반복자(forward iterator): 전방향 읽기, 쓰기 * 양방향 반복자(bidirectional iterator): 양방향 읽기, 쓰기(list, set, multiset, map, multimap) * 임의 접근 반복자(random access iterator): 랜덤 읽기, 쓰기(vector, deque) # <br>X::iterator, X::const_iterator * X::iterator: * 정방향 반복자의 내장 형식이다. * 반복자가 가리키는 원소 읽기, 쓰기 가능. * X::const_iterator: * 정방향 반복자의 내장 형식이다. * 반복자가 가리키는 원소 읽기 가능. ```C++ void main() { vector<int> v; v.push_back(10); v.push_back(20); v.push_back(30); v.push_back(40); v.push_back(50); cout<<"v[iterator 읽기 가능] : "; for(vector<int>::iterator iter=v.begin(); iter != v.end(); ++iter) cout << *iter <<" "; cout << endl; ...

[Troubleshooting] VisualStudio 2022 C2855 미리 컴파일된 헤더 파일 오류

 설명   빌드 속도 향상을 위해 미리 컴파일된 헤더 파일을 작성하고 이에 대한 프로젝트 설정을 적절히 수행하였으나 C2855오류가 나옴:    /Zc:preprocessor command-line option inconsistent with precompiled header 원인   잘 모르겠으나, /Zc:preprocessor 옵션이 활성화가 되기를 기대하고 있는데 하지 않았으므로 문제가 발생한 것으로 보임. 해결   프로젝트의 C/C++ 옵션에서 전처리기 탭의 표준 준수 전처리기 사용을 사용함으로 체크하였고 이를 해결할 수 있었음.

[C++] 스터디 CPPALOM 10주차: 뇌를 자극하는 C++ STL Chap 8

파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>10주차 – 뇌를 자극하는 C++ STL Chap 8 한수빈 # <br>STL 알고리즘 * STL에는 100여 개의 알고리즘이 있으며, 크게 다음 일곱 가지로 분류할 수 있다: * 원소를 수정하지 않는 알고리즘(nonmodifying algorithms) * 원소를 수정하는 알고리즘(modifying algorithms) * 제거 알고리즘(removing algorithms) * 변경 알고리즘(mutating algorithms) * 정렬 알고리즘(sorting algorithms) * 정렬된 범위 알고리즘(sorted range algorithms) * 수치 알고리즘(numeric algorithms) * 대부분의 알고리즘은 헤더 <algorithm>에 정의되며, 수치관련 알고리즘은 <numeric>에 정의된다. # <br>원소를 수정하지 않는 알고리즘 | 알고리즘 | 설명 | | :-: | :-: | | f=for_each(b,e,f) | 구간 [b,e)의 모든 원소에 f(*p)동작을 적용한다. f를 다시 되돌려준다. | | n=count_if(b,e,f) | n은 구간 [b,e)의 원소 중 f(*p)가 참인 원소의 개수 | | equal(b,e,b2,f) | [b,e)와 [b2,b2+(e-b))의 모든 원소가 f(*p,*q)가 참인가? | | p=find(b,e,x) | p는 구간[b,e)에서 x와 같은 첫 원소의 반복자 | | f=for_each(b,e,f) | 구간[b,e)의 모든 원소에 f(*p) 동작을 적용한다. f를 다시 되돌려준다. | | … | | # <br>count_if() count()의 조건자 버전이다. 조건에 맞는 원소의 개수를 구할 수 있다. ```C++ #include <iostream...

[C++] 스터디 CPPALOM 9주차: 뇌를 자극하는 C++ STL Chap 7,9

파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>9주차 – 뇌를 자극하는 C++ STL Chap 7,9 한수빈 # <br>set 컨테이너 연관 컨테이너 중 단순한 컨테이너로, key라 불리는 원소(value)의 집합으로 이뤄진 컨테이너이다. 연관 컨테이너는 균형 이진 트리를 사용하므로 찾기 연산에서 로그 시간의 복잡도를 보인다. ![](img%5Cweek9_subin0.png) # <br>set 컨테이너에서의 삽입 set 컨테이너는 중복 삽입을 허용하지 않는다. 또한 원소는 자동 정렬되며 정렬 기준으로 less를 사용한다. ```C++ #include <iostream> #include <set> using namespace std; void main( ) { set<int> s; // 정수 원소를 저장하는 기본 정렬 기준이 less인 빈 컨테이너 생성 s.insert(50); //랜덤으로 원소(key)를 삽입한다. s.insert(30); s.insert(80); s.insert(40); s.insert(10); s.insert(70); s.insert(90); set<int>::iterator iter; // 기본 정렬 기준이 less인 set의 양방향 반복자 for( iter = s.begin() ; iter != s.end() ; ++iter) cout << *iter << " "; // inorder 2진 트리 탐색 순서로 출력된다. cout << endl; s.insert(50); //중복된 원소(key)를 삽입한다. 실패!! s.insert(50); for( iter = s.begin() ; iter != s.end...

[Troubleshooting] C++ Native 프로젝트의 NuGet 배포

설명   Microsoft의 문서에는 C# 프로젝트에 대한 NuGet 활용만 자세히 기술되어 있고, Native C++에 대한 문서는 부족함. 간단한 C++ 프로젝트를 패키징하고 배포하는 과정에서 문제가 발생함. 참고한 링크는 다음과 같음: https://www.cognex.com/ko-kr/blogs/deep-learning/research/dependency-management-c-based-windows-application-using-nuget https://digitalhouseblog.wordpress.com/2019/08/22/how-to-make-a-nuget-package-for-c/   전자의 경우 빌드에 대한 구성을 패키지에 포함하지 않아 Visual Studio에서 패키지 매니저를 통한 라이브러리 설치 시 추가적으로 packages/ 폴더 내의 해당 라이브러리 디렉토리를 include해주어야 하는 문제가 있었음.   후자의 경우 이를 처리할 수 있어 보이나, 경로에 대한 적절한 설명이 부족하여 문제를 겪음. 원인   build를 위한 props 파일의 구성 해결   AdditionalIncludeDirectories 항목을 $(MSBuildThisFileDirectory)\..\include 로 설정해주어서 해결하였음. MSBuildThisFileDirectory 매크로는 말 그대로 해당 파일의 경로임. .nuspec에서 build 폴더에 빌드 설정을 담은 .props 파일을 담도록 명세하였음 .props에서 말하는 MSBuildThisFileDirectory는 NuGet 패키지 매니저에 의해서 설치된  {ProjectPath}/packages/build/ 경로가 될 것임. .nuspec에서 포함될 헤더 파일들은 include 폴더에 담도록 명세하였음. 따라서 $(MSBuildThisFileDirectory)\..\include로 설정해주는 것이 적절함. 상술한 링크에서는 props가 가...

[C++] 스터디 CPPALOM 8주차: 뇌를 자극하는 C++ STL Chap 5-6

파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>8주차 – 뇌를 자극하는 C++ STL Chap 5-6 한수빈 # <br>STL이란 * STL은 표준 C++ 라이브러리의 일부분으로 Standard Template Library의 약자이다. * 다음은 STL의 구성 요소이다: * 컨테이너(Container): 객체를 저장하는 객체로 컬렉션 혹은 자료구조라고도 한다. * 반복자(Iterator): 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키게 한다. * 알고리즘(Algorithm): 정렬, 삭제, 검색, 연산 등을 해결하는 일반화된 방법을 제공하는 함수 템플릿이다. * 함수 객체(Function Object): 함수처럼 동작하는 객체로 operator() 연산자를 오버로딩한 객체이다. 컨테이너와 알고리즘 등에 클라이언트 정책을 반영하도록 한다. * 어댑터(Adaptor): 구성 요소의 인터페이스를 변경해 새로운 인터페이스를 갖는 구성 요소로 변경한다. * 할당기(Allocator): 컨테이너의 메모리 할당 정책을 캡슐화한 클래스 객체이다. # <br>컨테이너 표준 시퀀스 컨테이너: 컨테이너 원소가 자신만의 삽입 위치(순서)를 가지는 컨테이너 표준 연관 컨테이너: 저장 원소가 삽입 순서와 다르게 특정 정렬 기준에 의해 자동 정렬되는 컨테이너 배열 기반 컨테이너: vector, deque 노드 기반 컨테이너: list, set, multiset, map, multimap # <br>vector 컨테이너 * vecto는 시퀀스 컨테이너이므로 추가한 순서대로 출력된다. * 또한, 배열 기반 컨테이너이므로 operator[] 연산자로 저장 원소에 접근할 수 있다. ```C++ #include <iostream> #include <vector> using namespa...