본문 바로가기

C++

[C++] 벡터(vector) 인스턴스 삽입시 정렬 유지하기 0. 소개 벡터는 sort() 함수로 정렬할 수 있다. 하지만 객체가 추가될 때마다, 정렬을 다시 시행할 것인가? 여기서는 객체가 추가될 때, 자동으로 순서에 맞는 곳을 찾아가 삽입돼서 자동 정렬되게 한다. 1. 원리 1. 먼저 벡터를 자체적으로 sort()함수로 정렬한다. 2. lower_bound 함수에서 삽입될 단어의 위치를 가리키는 반복자를 반환한다. 3. 위치를 가르키는 반복자를 이용해 그 위치에 단어를 넣는다. 2. 함수설명 assert () 함수 이 코드에서 첫 번째 assert함수는 정렬하기 전에 벡터가 정렬되어있는지 확인한다. 두 번째 assert함수는 정렬 후에 벡터가 정렬되어있는지 확인한다. 조건에 맞지 않으면 에러를 발생시킨다. insert_sorted() 함수 lower_bound.. 더보기
[C++] 정렬되지 않은 벡터(vector) O(1)시간으로 요소 삭제하기 0. 벡터의 소개 벡터는 배열 형태의 저장소가 필요할 때 다양한 크기로 변할 수 있다. 힙(heap)메모리를 이용해서 객체를 저장한다. 벡터의 한계에 다다르면 새로 배당된 메모리 영역으로 옮긴 뒤 기존 메모리 영역은 삭제한다. 요소를 추가하거나, 삭제하면 그에 맞춰 기존 요소를 앞뒤로 이동시킨다. 벡터의 한가운데에서의 요소 제거는 O(n)의 시간이 걸린다. (삭제 후 생긴 공백을 요소를 옮기면서 채운다.) 1. 정렬되지 않은 벡터 O(1) 시간으로 삭제하기 원리는 간단하다. 삭제하고 싶은 부분의 인덱스를 가져온다. 벡터의 끝에 있는 값을 삭제할려는 인덱스에 덮어 씌운다. 벡터의 끝 값은 삭제한다. ex) 예제 100, 200, 300를 가지는 벡터가 있다고 가정해보자. 여기서 인덱스 1번을 지우고 싶다... 더보기
[C++] Pair 개념, 활용, 선언, 초기화, 대소 비교 0. Pair 개념 Pair은 데이터 타입이 다를 수 있는 두 개의 값을 함께 결합될 때 사용된다. Pair 컨테이너는 'utility' 헤더에 선언되어 있으며, 두 개의 데이터 원소나 객체로 선언되어 있다. pair (data_type 1 , data_type 2) pair_name와 같은 형식을 갖는다. 1. Pair 활용 첫 번째 원소는 first로 참조되고, 두 번째 원소는 second로 참조된다. 순서는 (first, second)다. Pair은 할당, 복사, 비교가 가능하다. 맵, 해시맵에 할당된 객체 배열들의 타입의 기본은 Pair이다. 2. Pair 선언 코드 #include #include using namespace std; int main() { pair pair1; pair1.fir.. 더보기
[C++] STL의 개념, 구성요소, 특징, 장단점 1. STL(Standard Template Library)의 등장 C++은 표준 라이브러리를 가지고 있는다. 이를 이용해 직접 특정 기능을 작성하지 않고 제공되는 함수를 통해 손쉽게 기능을 구현할 수 있다. 그리고 1994년 7월에 C++ 표준 라이브러리에 STL이 추가되었다. 2. STL의 개념 STL의 사전적 의미는 표준 템플릿 라이브러리다. 템플릿의 특징은 하나의 코드로 여러 결과를 보여준다. STL의 모든 코드가 템플릿으로 되어 있다. STL은 기본 개념은 이미 구현되어 있는 공통적인 기능을 쉽게 사용하는 것이다. 3. STL 구성 요소 STL은 크게 컨테이너, 반복자, 알고리즘, 함수자로 구성되어 있다. 3-1 컨테이너 순차 컨테이너 : 동일한 객체가 선형으로 구성된 집합. 실행 시에 동적으로.. 더보기
[C++] 연산자 오버로딩의 개념, 활용, 주의점 0. 연산자 오버로딩의 개념 연산자 오버로딩은 C++에서의 특이하고도 강점인 기법이다. 기본적으로 제공되는 연산자의 연산을 사용자가 직접 오버로딩하여 새로운 기능으로 정의할 수 있다. ex) +연산자는 숫자를 더하는 1+2지만, 연산자 오버로딩을 통해 "C++" + "Program"과 같은 두 개의 문자열을 합친다. 1. 연산자 오버로딩의 사용 방법 연산자 함수를 이용해서 구현한다. operator op; (op는 +,-,*와 같은 실제 연산자를 나타낸다.) 2. 연산자 오버로딩 + 예제 #include using namespace std; class Point { private: int m_x; int m_y; public: Point(int x, int y) :m_x(x), m_y(y) {} Poin.. 더보기
[C++] C++과 JAVA의 차이점과 각 언어의 장단점 0. C++의 특징 흔히 말하는 객체지향 언어의 특징들을 많이 사용한다. 상속성, 캡슐화, 다형성(동적, 정적) 등의 기본적인 객체지향 언어의 특징을 지원한다. 그러나 객체 지향 언어와 다르게, 클래스나 객체를 생성하지 않고도 컴파일 될 수 있다. 그래서 반객체지향 언어라고도 불린다. 1. C++의 주요한 기능들 1-1 동적과 정적 메모리 할당 C++에서는 동적, 정적 할당이 둘 다 가능하다. 이는 사용자가 컴파일 시간(static memory allocation)과 실행시간(dynamic memory allocation)에 변수, 객체 등에 메모리를 할당할 수 있게 한다. 동적 메모리 할당은 malloc(), calloc(), realloc() 등의 기능으로 구현 가능하다. 1-2 템플릿의 생성 C++.. 더보기
[C++] 인라인 함수의 장단점, #define 매크로와 차이 0. 인라인 함수의 개념 C++ 언어에서 코드의 효율성을 고려하여 만들어진 기능이다. 인라인 함수는 함수 호출 오버헤드를 감소시킨다. 인라인 함수가 호출되면, 인라인 함수의 전체 코드가 인라인 함수 호출 시점에 삽입되거나 대체된다. 1. 인라인 함수의 기본적인 형태 inline return_type func_name(parameters) { //function code } 2. 인라인 함수 호출 예제 #include using namespace std; inline void print(void) { cout b; } inline void operation::sum() { add = a + b; cout 더보기