본문 바로가기

개발일지

(23)
C++ STL 정렬되지 않은 셋과 맵 unordered_set 과 unordered_map 은 C++ 11 에 추가된 비교적 최근 나온 컨테이너들 입니다. 이 두 개의 컨테이너는 이름에서도 알 수 있듯이 원소들이 정렬되어 있지 않습니다. 이 말이 무슨 말이냐면, 셋이나 맵의 경우 원소들이 순서대로 정렬되어서 내부에 저장되지만, unordered_set 과 unordered_map 의 경우 원소들이 순서대로 정렬되서 들어가지 않는다는 뜻입니다. 따라서 반복자로 원소들을 하나씩 출력해보면 거의 랜덤한 순서로 나오는 것을 볼 수 있습니다. #include #include #include using namespace std; template void print_unordered_set(const unordered_set& m) { // 셋의 모든 ..
C++ STL 멀티셋(multiset) 과 멀티맵 (multimap) 기존 셋과 맵 모두 중복된 원소를 허락하지 않습니다. 만일, 이미 원소가 존재하고 있는데 insert 를 하였으면 무시가 되었지요. 하지만 멀티셋과 멀티맵은 중복된 원소를 허락합니다. 멀티셋(multiset)과 멀티맵(multimap) #include #include #include using namespace std; template void print_set(const multiset& s) { // 셋의 모든 원소들을 출력하기 for (const auto& elem : s) { cout
C++ STL 셋(SET), 맵(MAP) C++ 에는 시퀀스 컨테이너들 (vector, list, deque) 3종류 외에 다른 종류의 컨테이너인 연관 컨테이너(associative container) 의 셋(set) 과 맵 (map) 에 대해서 알아보겠습니다. 연관 컨테이너는 시퀀스 컨테이너와는 다르게 키(key) - 값(value) 구조를 가집니다. 위 처럼 연관 컨테이너는 키를 바탕으로 이에 대응되는 값을 얻을 수 있는 구조 입니다. #include #include using namespace std; template void print_set(set& s) { // 셋의 모든 원소들을 출력하기 cout
C++ 표준 템플릿 라이브러리 (Standard Template Library - STL) C++ 에서는 개발자 편의를 위하여 표준 템플릿 라이브러리를 제공한다. STL는 하기처럼 3개의 라이브러리로 구성되어있습니다. 임의 타입의 객체를 보관할 수 있는 컨테이너 (container) 컨테이너에 보관된 원소에 접근할 수 있는 반복자 (iterator) 반복자들을 가지고 일련의 작업을 수행하는 알고리즘 (algorithm) C++ `STL` 컨테이너 - 벡터 (std::vector) 먼저 시퀀스 컨테이너의 경우 vector, list, deque 이렇게 3 개가 정의되어 있습니다. vector의 경우 가변길이 배열로써 템플릿에 사전 정의된 함수(push_back)로 원소를 추가하거나 해당 원소에 접근([], at함수) 할 수 있습니다. 그럼 아래에 간단한 예제를 들어보겠습니다. #include #..
안드로이드 프로그래밍 - Binding 안드로이드 프로그래밍에 있어 Binding 은 혁신적인 기술입니다. 기존 findViewById는 직관적이긴하나 모든 contents에 대해서 일일히 선언해주고 찾아주어야 하는 불편함이 있었습니다. 간단한 앱이라면 관계없겠지만 규모가 큰 프로젝트에서는 유지보수나 코드리딩에 훨씬 불편함을 느낄 수 있습니다. activity_main.xml 바인딩을 사용하기전 먼저 Android 프로젝트 설정이 몇가지 필요합니다. Gradle Scriptts 내에 build.gradle 에 하기와 같이 뷰바인딩을 활성화 시켜주어야 합니다. //뷰바인딩 옵션 활성화 viewBinding { enabled = true; } 그리고 기존에 MainActivity.java 에서 사용했던 setContentView(layout) 은..
안드로이드 프로그래밍 - progress bar progress bar는 안드로이드 앱 내에서 어떤일의 진행 척도를 보여주는 게이지이다. bar형태 뿐만아니라 원형 형태도 있다. 버튼을 누를때마다 10이 증가하여 progress bar를 채우는 형태로 작성했다. 100이 되면 다시 0으로 초기화된다. protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.button); progressBar = findViewById(R.id.progressBar); button.setOnClickListener(new View.OnClickLis..
안드로이드 프로그래밍 - Toast 메시지, Snackbar 안드로이드 상에 가볍게 팝업되는 Toast 메시지는 기본적으로 하단과 같이 작성한다. Toast.makeText( Context, 메시지문구, 띄우는 시간).show(); public void Toast(String m){ Toast toast = Toast.makeText(getApplicationContext(),m,Toast.LENGTH_SHORT); toast.show(); } 기본적으로 중앙 하단에 띄워지게 되는데 위치를 변경하는것도 가능하다. public void Toast(String m){ Toast toast = Toast.makeText(getApplicationContext(),m,Toast.LENGTH_SHORT); toast.setGravity(Gravity.TOP|Gravity...
C++ 스터디 - 템플릿 C++ 스터디 4주차 템플릿 템플릿에는 크게 2가지가 있는데 함수 템플릿/클래스 템플릿이 있습니다. 함수 템플릿의 경우 함수위에 template 를 명시해주고 함수내에 변수 타입자리에 T를 기재해서 T가 상황에 맞는 변수형으로 인식한다. EX) template T getArraySum(T arr[], int n){ T sum = T(); for (int i=0; i