판교 슈퍼 스테이크에 다녀왔습니다.

일행이 4명이었는데, 2명은 채끝 스테이크 200g을 저랑 나머지 한 명은 슈바인골드 스테이크를 먹었습니다.

스테이크에 천원 추가하면 무제한으로 탄산 음료가 제공됩니다.


아래 메뉴는 일반 메뉴로써, 점심 특선은 더 싸요! 점심 특선은 11시 부터 15시까지입니다.



 

※ 요약
std::vector의 주요 멤버 함수 목록이다.
오버로딩 되는 항목들에 대해서 모두 넣지 않았지만 대략적인 설명을 할 것이므로 큰 문제는 없을 것이다.
또 한 C++03과 C++11의 구분을 색으로 할 것이며, 추후에 추가되는 C++14, C++17에 대해서도 추가하도록 하겠다.
std::vector의 본격적인 사용법을 알아보기 전에 한 번 훑어보면 도움이 될 것이다.

- C++03

- C++11

 분 류

 멤버 함수

 설 명

Iterators

begin

 첫 번째 원소를 가리키는 반복자를 리턴한다.

cbegin

 첫 번째 원소를 가리키는 상수 반복자를 리턴한다.

end

 마지막 원소를 가리키는 반복자를 리턴한다.

cend

 마지막 원소를 가리키는 상수 반복자를 리턴한다.

rbegin

 역 순차열의 첫 번째 원소를 가리키는 반복자를 리턴한다.

crbegin

 역 순차열의 첫 번째 원소를 가리키는 상수 반복자를 리턴한다.

rend

 역 순차열의 마지막 원소를 가리키는 반복자를 리턴한다.

crend

 역 순차열의 마지막 원소를 가리키는 상수 반복자를 리턴한다.

Element access

at

 n번째 원소를 참조할 때 사용하며 범위 점검을 하므로 []보다 느리다.

operator[]

 n번째 원소를 참조할 때 사용하며 범위 점검을 안하므로 at보다 빠르다.

front

 첫 번째 원소의 참조를 리턴한다.

back

 마지막 원소의 참조를 리턴한다.

Capacity

empty

 원소 존재 유무를 체크한다. 아무것도 없으면 true, 있으면 false를 리턴한다.

size

 원소의 개수를 리턴한다.

max_size

 담을 수 있는 원소의 최대 개수를 리턴한다.

resize

 vector의 크기를 변경하고 default 값이나 임의 값으로 초기화한다.

capacity

 vector에 할당된 메모리의 크기를 리턴한다.

reserve

 지정한 크기 만큼의 메모리를 미리 할당한다.

shrink_to_fit

 사용되지 않는 capacity size를 제거한다. 즉 size() == capacity()가 된다.

Modifiers

clear

 vector의 모든 원소를 제거한다.

assign

 기존 원소들은 모두 제거 후, 임의 값으로 n개의 원소를 할당한다.

insert

 임의 위치에 임의 값을 삽입한다.

emplace

 원소 삽입시 컨테이너 내부에서 생성 후 임의 위치에 임의 값을 삽입한다.

emplace_hint

 제공 안 함

erase

 임의 위치의 원소나 지정 범위의 원소를 삭제한다.

push_front

 제공 안 함

emplace_front

 제공 안 함

pop_front

 제공 안 함

push_back

 vector의 끝에 원소를 추가한다.

emplace_back

 원소 삽입시 컨테이너 내부에서 생성 후 컨테이너의 끝에 원소를 추가한다.

pop_back

 vector의 마지막 원소를 제거한다.

swap

 v1.swap( v2 )일때 v1과 v2를 swap한다.

List operations

merge

 제공 안 함

splice

 제공 안 함

remove

 제공 안 함

remove_if

 제공 안 함

reverse

 제공 안 함

unique

 제공 안 함

sort

 제공 안 함

Lookup

count

 제공 안 함

find

 제공 안 함

lower_bound

 제공 안 함

upper_bound

 제공 안 함

equal_range

 제공 안 함

Observers

key_comp

 제공 안 함

value_comp

 제공 안 함

hash_function

 제공 안 함

key_eq

 제공 안 함

Allocator

get_allocator

 vector의 allocator 객체를 반환한다.




'STL - Containers > vector' 카테고리의 다른 글

[C++ STL] std::vector - emplace_back  (3) 2016.04.15
[C++ STL] std::vector - push_back  (0) 2016.02.19
[C++ STL] std::vector 개요  (3) 2015.11.10

 

※ 요약
엑셀 파일 내 하이퍼 링크가 걸린 cell들에 대하여 일괄로 하이퍼 링크 삭제하는 방법이다.

※ 방법
아래와 같이 하이퍼 링크를 삭제할 셀들을 선택한다.
전체 셀들에 대해 하이퍼 링크를 삭제 하려면 Ctrl+A를 눌러 전체 셀을 선택해 주면 된다.


선택된 셀들 중에 아무 셀에 마우스 우클릭을 한 뒤, "하이퍼 링크 제거(R)" 버튼을 누른다.


하이퍼 링크가 삭제된 모습이다.

 


※요약
윈도우와 리눅스 상에서의 mac 주소 확인 방법이다.

※ 윈도우

아래와 같이 "getmac"을 콘솔 창에 입력하면 자신의 mac 정보를 알 수 있다.

옵션으로 "-v"을 붙이면 좀 더 자세한 정보가 나온다.

아래 방법 말고도 콘솔 창에 "ipconfig -all"을 입력해도 알 수 있다.


※ Linux

아래와 같이 "ifconfig -a | grep eth"를 입력하면 mac 주소를 알 수 있다.



※요약
가끔은 어떤 파일의 MD5 값을 확인해야 할때가 있다. 필자의 컴퓨터에는 hashtab이 설치되어 있어서 간편하게 확인 가능하지만 다른 사람의 컴퓨터에 저장된 파일의 MD5 값이나 SHA 등의 hash 값을 확인하려면 해당 PC에 hashtab을 설치하거나 내 컴퓨터로 파일을 가져와서 확인해야 했는데 온라인으로 hash 값을 확인할 수 있는 사이트가 있어 소개하고자 포스팅한다.

※특징
프로그램 설치 없이 온라인으로 원하는 파일의 해시 값을 확인할 수 있다.
구할 수 있는 해시 값으로는 MD5, SHA-1, SHA-256이 있으며, 당연한 얘기겠지만 파일 사이즈가 클수록 시간이 오래 걸린다.
Online MD5 사이트를 통해 해시 값을 구할 수 있는 파일 최대 사이즈는 4GB다.

※사이트 주소



 

※ std::array 요약
std::array는 C++11에 새롭게 추가된 컨테이너 라이브러리로써, 크기가 고정되어 있다는 것을 제외하면 std::vector와 비슷하다.
크기가 고정이므로 스택에 저장되며 C++03까지는 없었던 고정 길이 배열 자료구조 컨테이너로써 기존의 배열을 대체하기에 완벽하다.

※ std::array 특징
- 배열을 대체할 수 있다.
- 정적 배열이므로 스택에 저장된다. (std::vector는 힙 메모리에 저장된다!)
- 데이터가 연속된 위치에 저장되므로 랜덤 액세스가 가능하고 접근 속도도 빠르다.
- 정적이므로 push_back(), pop_back(), insert(), erase(), clear(), resize(), reserve(), capacity()멤버 함수는 지원하지 않는다.

※ std::array를 사용해야 하는 경우
- C++11이 지원되는 컴파일러라면 배열 대신 사용하면 좋다.
(필자는 C++11이 지원되는 컴파일러에서 작업하면 배열 대신 무조건 std::array를 사용한다. STL과 새롭게 추가되는 문법 등과의 결합도가 좋고 속도도 빠르며, 무엇보다 (조금이지만)편하기 때문이다.)


 

※ std::deque 요약
std::deque는 Double Ended Queue의 약자로써, 시퀀스 컨테이너다.

필자는 시뮬레이터 서버를 제작할 때와 Singleton 방식의 Log Class를 제작할때 std::deque의 사용을 고려해본 적이 있다.


※ std::deque 특징

- 크기가 가변적이다. (사실 std::array를 제외한 거의 모든 STL 컨테이너의 특징이다.)

- 앞(front)과 뒤(back)에서의 삽입, 삭제 성능은 좋지만 중간에서의 삽입, 삭제는 그다지 좋지 않다.

- std::deque는 Stack과 Queue가 결합된 자료구조로써 연결 리스트보다 구현하기가 어렵다.

- std::vector처럼 랜덤 액세스가 가능하다.


※ std::deque와 std::vector
- std::deque와 std::vector의 멤버 함수 기능이나 사용 방법은 거의 동일하다.

- std::vector는 뒤(back)에서의 삽입, 삭제 성능이 좋지만 std::deque는 앞(front), 뒤(back), 모두에서 좋다.

- std::deque의 앞, 뒤 삽입, 삭제 성능을 제외한 다른 위치에서의 삽입, 삭제는 std::vector가 더 좋다.

- 둘 다 랜덤 액세스가 가능하다.

 

※ std::deque를 사용해야 하는 경우

- 앞과 뒤에서 삽입, 삭제를 자주 할 때

- 저장할 데이터의 개수가 가변적 일 때

- 데이터 검색을 거의 하지 않거나, 아예 안 할 때 (검색을 해야 한다면 std::map이나 std::set 등의 연관 컨테이너 사용을 고려)

- 랜덤 액세스를 해야 할때

- 서버처럼 받은 패킷을 차례대로 처리할 때 (이 때는 범용적인 deque보다 좀 더 좋은 성능의 독자적인 자료구조를 만들기도 함)


 

 

 

※ STD::forward_list 요약
std::list가 양방향(double linked list)이라면 std::forward_list는 단방향(single linked list)이다.
단방향 연결 리스트라 양방향인 std::list보다 메모리 사용량이나 처리 속도면에서 조금 유리하다.
double linked list가 필요하다면 std::list를, single linked list로도 충분하다면 std::forward_list를 사용한다.

※ std::forward_list 특징
- single linked list(단일 연결 리스트) 자료구조를 이용하여 만든 시퀀스 컨테이너다.
- 설계 디자인을 std::list에 맞춘다.(STL은 범용성을 지향하므로 다른 컨테이너들도 마찬가지다.)
- 속도와 사이즈, 즉 성능을 최우선으로 설계, 제작되었다.
- 다른 STL 컨테이너에 있는 size 함수를 제공하지 않는다.
- size는 다음과 같이 구한다. -> size_t size = std::distance( list.begin(), list.end() )

※ std::forward_list와 std::list
- std::list는 양방향으로 이동 가능하지만 std::forward_list는 한 방향으로만 이동할 수 있다.
- std::list보다 삽입/삭제 속도가 아주 약간 더 빠르다.
- 양방향인 std::list에 비해 메모리를 적게 사용한다. 각 요소 뿐만이 아닌, 컨테이너 자체 사이즈도 더 작다.
- 삽입과 삭제는 지정한 요소의 다음 요소에 한해서만 가능하다.(단방향이므로 당연하다)
- 구현의 복잡성과 성능 문제 때문에 std::list에서 제공하는 insert와 erase를 제공하지 않는다.

 

※ std::forward_list를 사용해야 하는 경우

- double linked list가 아닌 single linked list로도 충분할때


 

 

※ std::set 요약
std::set은 std::map과 상당히 비슷한 연관 컨테이너이다. 다른 점이 있다면 value 없이 key만으로 이뤄졌다는 것 정도이다.
std::set은 노드 기반 컨테이너이며 균형 이진 트리로 구현 되므로 균형 이진 트리의 모든 특징을 갖는다.
std::set은 std::map과 마찬가지로 중복된 key를 저장할 수 없으므로, 중복 저장하고 싶다면 std::multiset을 사용해야 한다.
동일 타입 집합이라는 점에서는 std::vector와 같지만 요소가 정렬된 위치에 삽입 된다는 점이 다르다.

※ std::set 특징
- std::set은 std::map과 상당히 비슷하다. 차이점이라면 std::map과 다르게 value 없이 key만 저장한다는 것 정도다.
- std::set의 key는 중복될 수 없다. 중복 저장해야 한다면 std::multiset을 사용한다.
- 데이터 삽입과 동시에 정렬이 일어난다.
- 정렬은 key를 기준으로 정렬되며 기본 정렬 기준은 less(오름차순) 정렬이다.
- 검색 또한 key를 기준으로 검색(이분검색)한다.
- 검색시 균형 이진 트리를 이용한 로그 시간 검색 복잡도를 보장한다.

※ std::set을 사용해야 하는 경우
- 삽입과 동시에 정렬해야 할때
- key가 있는지 없는지 알아야 할때
- 많은 데이터를 보관해야 하고, 동시에 검색이 빨라야 할때
- 많은 데이터가 중복 되어서는 안 되며 빠른 검색으로 존재 여부를 신속하게 알고 싶을때!

 

※ std::map 요약
필자가 std::vector와 함께 많이 사용하는 연관 컨테이너 std::map에 대한 설명이다.
std::map은 key와 value의 쌍을 원소로 저장(pair 객체로 저장)하며, set처럼 원소의 key는 중복될 수 없다.
중복 key를 저장해야 한다면 std::multimap을 사용하여야 한다.
연관 컨테이너는 어떠한 key와 짝을 이루어 자료를 보관하는데, 자료를 넣거나 빼거나 찾을 때는 key를 이용하여야 한다.

※ std::map 특징
- std::map은 레드-블랙 트리(Red-Black Tree) 자료구조이다.
- std::map의 key는 중복될 수 없다. 중복 저장해야 한다면 std::multimap을 사용한다.
- 데이터 삽입과 동시에 정렬이 일어난다.
- 정렬은 key를 기준으로 정렬되며 기본 정렬 기준은 less(오름차순) 정렬이다.
- 검색 또한 key를 기준으로 검색(이분검색)한다.
- std::map의 원소는 std::pair 객체로 저장된다.
- 저장할 자료가 적을때는 메모리 낭비와 검색시 오버헤드가 생겨 대포로 파리 잡는 격이다.

※ std::map을 사용해야 하는 경우
- 삽입과 동시에 정렬해야 할때
- 많은 데이터를 보관해야 하고, 동시에 검색이 빨라야 할때
- 데이터 삽입, 삭제가 적을때


+ Recent posts