본문 바로가기

전체 글

(35)
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) 은..
안드로이드 프로그래밍 - Fragment 최근 안드로이드 앱은 테블릿 pc 등 다양한 화면 환경에서 복잡한 레이아웃과 뷰 위젯 배치로 인해 activity 만을 사용하여 구성하기엔 버거운 면이 많았습니다. 그래서 Fragment 라는 개념이 추가되었는데, 프래그먼트는 액티비티 화면 내에서 화면 UI의 일부를 나타냅니다. 여러 개의 프래그먼트를 조합하여 액티비티를 출력하는 한 화면을 구성할 수 있습니다. 또한 한개의 프래그먼트를 다양한 액티비티에 재사용할 수 있습니다. 그리고 한 화면에 들어가는 다양한 요소를 프래그먼트 단위로 관리하기 때문에 복잡도를 줄일 수 있습니다. 다음과 같이 간단하게 메인액티비티를 구성하였습니다. 메뉴 버튼 4개를 추가하여 각각 버튼 터치시마다 다른 Fragement를 보여줄 예정입니다. 메인 액티비티 xml 구성 프래그..
안드로이드 프로그래밍 - Intent2 안드로이드 프로그래밍 지난번에이어서 Intent 에 객체정보를 넣어서 전달해주는 부분을 해보겠다. 먼저 Pacelable 인터페이스를 implements 하는 class SimpleData를 생성해줬다. public class SimpleData implements Parcelable { int code; String message; public SimpleData(int code,String message){ this.code = code; this.message = message; } public SimpleData(Parcel src){ code = src.readInt(); message = src.readString(); } public static final Parcelable.Creator ..
안드로이드 프로그래밍 - Intent 안드로이드 상에서 화면을 구성하고 있는 activity 간에 data를 전달할수 있는 방법은 Intent 객체를 이용하는 방법이다. 2개의 화면(activity) 가 있을때 화면전환을 하고자 한다면 하기와 같이 코딩한다. 버튼 한개를 활성화시켜서 해당 버튼 터치시 Intent 객체에 담아둔 Menuactivity 가 start 된다. (이때 requestcode 로 101을 전달해준다, requestcode는 onActivityResult 함수에서 다시 활용할 수 있다. 다만 startActivityForResult 를 사용할때만 가능하고 일반적으로startActivity() 만 사용하기도 한다. ) Button button = findViewById(R.id.button); button.setOnCli..