티스토리 뷰
안녕하세요! 관광이 개발블로그의 관광이 입니다
이번에 알아볼 STL의 종류중 하나인 VECTOR에 대해서 살펴보겠습니다.
1. Vector Container
VectorContainer는 자동으로 메모리가 할당되는 배열이라고 합니다.
대표적인 메소드로는
- v.front() - 가장 앞 위치
- v.back() - 마지막 위치
- v.push_back() - 가장마지막에 원소 push
- v.pop_back() - 가장 마지막 원소 pop
맨뒤쪽에서 삽입과 삭제가 가능하다.
2. Vector Container 사용시 필요한 사항
#include <vector>
== vector<int> v; 라고 가정.
== 참조 한다는 것은 해당 데이터를 리턴 한다는 뜻입니다.
v.assign(5, 2);
- 2의 값으로 5개의 원소 할당.
v.at(idx);
- idx번째 원소를 참조합니다.
- v[idx] 보다 속도는 느리지만, 범위를 점검하므로 안전합니다.
v[idx];
- idx 번째 원소를 참조합니다.
- 범위를 점검하지 않으므로 속도가 v.at(idx)보다 빠릅니다.
v.front();
- 첫번째 원소를 참조합니다.
v.back();
- 마지막 원소를 참조합니다.
v.clear();
- 모든 원소를 제거합니다.
- 원소만 제거하고 메모리는 남아있습니다.
- size만 줄어들고 capacity는 그대로 남아있습니다.
v.push_back(7);
- 마지막 원소 뒤에 원소 7을 삽입합니다.
v.pop_back();
- 마지막 원소를 제거합니다.
v.begin();
- 첫번째 원소를 가리킵니다. (iterator와 사용)
v.end();
- 마지막의 "다음"을 가리킵니다 (iterator와 사용)
v.rbegin();
- reverse begin을 가리킨다 (거꾸로 해서 첫번째 원소를 가리킵니다)
- iterator와 사용.
v.rend();
- reverse end 을 가리킨다 (거꾸로 해서 마지막의 다음을 가리킵니다)
- iterator와 사용.
v.reserve(n);
- n개의 원소를 저장할 위치를 예약합니다(미리 동적할당 해놉니다)
v.resize(n);
- 크기를 n으로 변경한다.
- 더 커졌을 경우 default값인 0으로 초기화 한다.
v.resize(n,3);
- 크기를 n으로 변경한다.
- 더 커졌을 경우 인자의 값을 3으로 초기화한다.
v.size();
- 원소의 갯수를 리턴한다.
v.capacity();
- 할당된 공강의 크기를 리턴한다.
- 공간 할당의 기준은 점점 커지면서로 capacity를 할당하게 됩니다.
- dev c++ 기준으로 string 클래스로 vector 를 만들었을때.
원소 갯수 1 => capacity 1
원소 갯수 2 => capacity 2
원소 갯수 3 => capacity 4
원소 갯수 4 => capacity 4
원소 갯수 5 => capacity 8
원소 갯수 6 => capacity 8
원소 갯수 7 => capacity 8
원소 갯수 8 => capacity 8
원소 갯수 9 => capacity 16
을 봐서는 2^n으로 capacity의 메모리 할당이 되지 않나 싶습니다.(아래에서 테스트 해보겠습니다)
이런식으로 메모리 할당을 하는 이유는 push_back이 일어날때 마다 동적할당을 하면,
비효율적이므로 미리 정해둔 만큼 동적할당을 한번에 하는 것 입니다.
**capacity와 size는 다
size는 할당된 메모리 안에 요소가 들어있는것의 갯수.
capacity는 할당된 메모리의 갯수? 크기.
3. vector의 멤버 형식
iterator - 반복자 형식
reverse_iterator - 역 반복자 형식
value_type - 원소의 형식
size_type - 원소의 개수의 형식
4. vector 출력
#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int> v;
v.push_back(21);
v.push_back(32);
v.push_back(53);
v.push_back(64);
v.push_back(15);
//ex1) 멤버형식 size_type 이용한 반복.
cout << "ex1-1) [v.at(i)] size_type : " ;
for(vector<int>::size_type i =0; i<v.size(); i++){
cout << v.at(i) << " ";
}
cout << endl;
cout << "ex1-1) [ v[i] ] size_type : " ;
for(vector<int>::size_type i =0; i<v.size(); i++){
cout << v[i] << " ";
}
cout << endl << endl;
//ex2) int i 를 이용한 반복.
cout << "ex2-1) [v.at(i)] int : " ;
for(int i =0; i<v.size() ; i++){
cout << v.at(i) << " ";
}
cout << endl;
cout << "ex2-2) [ v[i] ] int : " ;
for(int i =0; i<v.size() ; i++){
cout << v[i] << " ";
}
cout << endl << endl;
//ex3) 반복자 iterator를 이용한 반복.
cout << "ex3) [*iter] iterator : ";
vector<int>::iterator iter;
for(iter = v.begin(); iter != v.end() ; iter++){
cout << *iter << " ";
}
cout << endl << endl;
return 0;
5. vector 삽입 삭제
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(void){
vector<string> v;
v.push_back("Show Me");
v.push_back("Tiger JK");
v.push_back("Dok2");
v.push_back("GAEKO");
v.push_back("ZICO");
//ex4) v.front(), v.back()
cout << "//ex4) v.front(), v.back()" << endl;
cout << "v.front() : " << v.front() << endl;
cout << "v.end() : " << v.back() << endl;
cout << endl;
//ex5) v.popback()
cout << "//ex5) v.popback()" << endl;
vector<string>::iterator iter;
for(iter = v.begin(); iter != v.end() ; iter++){
cout << *iter << " / " ;
}
cout << endl;
v.pop_back();
for(iter = v.begin(); iter != v.end() ; iter++){
cout << *iter << " / " ;
}
cout << endl;
cout << endl;
//ex6) v.erase(iter);
cout << "//ex6) v.erase(iter)" << endl;
for(iter = v.begin(); iter != v.end() ; iter++){
if(*iter == "Dok2"){
v.erase(iter);
break;
}
}
for(iter = v.begin(); iter != v.end() ; iter++){
cout << *iter << " / " ;
}
cout << endl << endl;
//ex7) v.size(), v.capacity();
cout << "//ex7) v.size(), v.capacity()" << endl;
cout << "v.size() : " << v.size() << endl;
cout << "v.capacity() : " << v.capacity() << endl;
return 0;
}
지금까지 Vector에 대해 간단히 알아보았습니다. C++ 알고리즘시 많이 사용되는 컨테이너이므로 잘 정리 해놔야겠습니다. 감사합니다.
Reference : http://blockdmask.tistory.com/70
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준알고리즘 7576 토마토 익히기 BFS (0) | 2018.07.30 |
---|---|
[알고리즘] 백준알고리즘 1697 숨바꼭질 BFS (0) | 2018.07.30 |
[알고리즘] 백준알고리즘 2178 미로 BFS (0) | 2018.07.30 |
[알고리즘]C++ STL Queue의 Pair을 사용하는 이유 (1) | 2018.07.29 |
[알고리즘] BFS(Breadth First Search) 너비우선탐색 알고리즘 (0) | 2018.07.28 |
- Total
- Today
- Yesterday
- MVC
- 초보자를 위한 C언어 300제
- 복습
- Algorigm
- 노드
- Controller
- Spring
- 안드로이드
- 백준알고리즘
- 코드엔진
- 리버싱
- TensorFlow
- 알고리즘
- node
- 텐서플로우
- 백준
- programming
- node.js
- db
- C언어
- 스프링
- BFS
- 감자코딩
- 프로그래밍
- 학교
- 머신러닝
- C langauge
- Android
- 감자개발자
- 개발하는 관광이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |