반응형

개발/C++ 37

[C++] 버블 정렬

사용자가 원하는 대로 입력받고 입력받은 것을 토대로 버블 정렬하기 위해서 배열 말고 벡터를 선택했다. 배열은 길이를 유동적으로 하기 어렵지만 벡터는 쉽기 때문이다. 버블 정렬은 인접해 있는 두 개의 값을 비교해 자료 교환을 하는 것이다 오름차순 정렬 : 두 개의 값을 비교해 큰 값을 오른쪽으로 보냄 내림차순 정렬 : 두 개의 값을 비교해 작은 값을 오른쪽으로 보냄 장점 : 여러 번 값을 비교하기 때문에 안전성 있다. : 두 개의 값을 비교해 이동시키기 때문에 단순하다. 단점 : 다른 정렬에 비해 연산 시간이 오래 걸린다. #include #include using std::vector; void ascending_sort(vector &inputVec); void descending_sort(vector..

개발/C++ 2017.01.02

[C++] 링크드 리스트 (Linked List) 구현

오랜만에 링크드 리스트를 다시 한 번 구현해보았다. 예전엔 C로 구현했는데 이번엔 C++ 로 구현해보았다. 1학년 때는 코딩을 지금처럼 열심히 하지 않았기에 끙끙대면서 구현했지만 지금 오랜만에 짜보니까 정말 쉬워서 내가 1학년 때 너무 놀았다는 것을 다시 한 번 깨달게 되었다. /* node.h */ #pragma once #include class Node { public : Node *nextNode = nullptr; int data; }; class Link { public : Node *head = new Node(); void insert(int data); int getData(int nodeIndex); void deleteData(int nodeIndex); const void print..

개발/C++ 2017.01.01

[C++] 상수 포인터, 비상수 데이터

const 위치에 따라 상수 포인터 / 비상수 데이터와 비상수 포인터 / 상수 데이터가 될 수 있는데 알아보자 #include int main() { int a = 10; int * const aa = &a; *aa = 5; //상수 포인터 //비상수 데이터 return 0; } 위의 코드에서는 상수 포인터이나 비상수 데이터인 변수 aa를 선언한 것이다. 상수 포인터란 말은 말 그대로 주소값을 변경하지 못한다는 말이다. #include int main() { int b = 9; const int *a; *a = 5; //불가능 //비상수 포인터 //상수 데이터 a = &b; //가능 return 0; }

개발/C++ 2016.12.28

[C++] shared_ptr

스마트 포인터 중 하나인 shared_ptr 에 대해서 알아보자. shared_ptr은 reference-counting smart pointer 중의 하나이다. std :: shared_ptr은 포인터를 통해 객체의 공유 소유권을 유지하는 스마트 포인터이다. 여러 shared_ptr 객체가 동일한 객체를 소유 할 수 있고, 객체가 파괴되고 다음 중 하나가 발생하면 메모리가 해제된다. - 마지막으로 남아있는 shared_ptr을 소유하고 있는 객체가 파괴된다. - 마지막으로 남아있는 shared_ptr을 소유하고 있는 객체가 다른 포인터에 의해 operator= 또는 reset()으로 할당된 경우하여 객체가 파괴된다. 생성되는 동안 shared_ptr에 제공되는 delete-expression 이나 cu..

개발/C++ 2016.12.26

[C++] list 컨테이너

list 컨테이너list는 헤더파일 에 정의된 순차 컨테이너의 한 종류로 원소들을 메모리 상에 선형으로 배열된다. list 컨테이너는 이중 연결 리스트로 구현되는데 이중 연결 리스트를 이용하면 메모리 상의 임의의 위치에 원소를 저장하더라도 참조를 할 수 있게 된다. 왜냐하면 어떤 원소의 위치는 이전 원소와 다음 원소의 링크를 통해 따라서 추적해 나갈 수 있기 때문이다. vector, deque와 비교했을 때, list는 원소의 삽입, 삭제, 그리고 컨테이너 내부에서의 원소들 간의 이동이 매우 효율적이다. 따라서 정렬 알고리즘처럼 원소의 이동이 빈번하게 일어나는 곳에 적용하면 효율적이다. 생성자1. list() - 빈 컨테이너를 생성한다. 2. explicit list (size_type n, const ..

개발/C++ 2016.12.22

[C++] deque 컨테이너

deque 컨테이너deque는 vector와 유사성이 있는 듯 하면서도 상당히 많이 다르다고 할 수 있는 시퀀스 컨테이너다. 우선, Random access iterator를 통한 개별 원소에 대한 접근이 가능하다. operator []도 지원되며 컨테이너의 크기 역시 동적으로 조절되지만, 그 방법은 vector와 많이 다르다. 장점 : 개별 원소들을 인덱스로 접근이 가능하다. 원소를 컨테이너의 끝 뿐 아니라, 앞에서도 삽입 및 제거하는 것이 빠르고 어떠한 순서로도 원소들을 순회할 수 있다. 단점 : 컨테이너 시작 및 끝 위치가 아닌 곳에서 삽입 및 제거 수행 시에 그 성능은 list에 비해 현저히 떨어진다. vector와 deque의 차이점1. vector는 끝에 삽입 및 제거하는 것이 빨랐지만, de..

개발/C++ 2016.12.22

[C++] vector 컨테이너

vector 컨테이너 vector 컨테이너는 동적 배열로 구현되는데, 보통의 배열처럼 vector 컨테이너들도 각각의 원소들이 메모리 상에서 연속적으로 존재하게 된다. 이 때문에 vector 컨테이너의 원소를 참조할 때 iterator(반복자)를 이용해서 순차적으로 참조할 수 있고, 처음 원소부터의 상대적인 거리를 이용하여 접근할 수도 있다. but, 보통의 배열과는 달리 vector 컨테이너는 스스로 공간을 할당하고, 크기를 확장 또는 줄일 수도 있다. 장점1. 각각의 원소를 원소의 인덱스 값으로 바로 참조 가능하다.2. 원소들을 임의로 접근할 수 있다.3. 벡터 끝에 새로운 원소를 추가하거나 제거할 수 있다. vector는 배열이 제공하는 거의 모든 기능을 다 가지고 있는데 vector 컨테이너의 크..

개발/C++ 2016.12.21

[C++] static 변수

C언어에서 static과 C++에서의 static 은 다르다. C++에서는 전역이라는 개념이 없다. 그것을 대체하기 위해서 static이 있는 것이다. #include class A { private: static int count; public: A() { count++; } void showCount() { std::cout showCount(); //출력값 : 2 return 0; } 17번 째 줄에서 보시다시피 static 변수를 초기화할 때는 main 함수 안이 아닌 밖에서 초기화해주어야 한다.또한, static 변수는 선언과 초기화를 동시에 하지 못한다는 것을 기억하자

개발/C++ 2016.12.20

[C++] const 함수와 mutable

const로 선언되어 있는 함수에서는 값을 쓰거나 변경하지 못한다. 오로지 읽기만 가능하다. 하지만 mutable 예약어를 사용해 선언한 변수는 const 함수에서 값 쓰기와 변경이 가능하다.너무 좋다. 12345678910111213141516171819202122232425262728293031323334353637383940414243 #include class AAA {private: mutable int count = 0; public : int getCount() const; void setCount(); void showData();}; int AAA::getCount() const { count = 10; return count;} void AAA::setCount() { count = 1..

개발/C++ 2016.12.13
반응형