일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c++
- tcp
- c언어 게임
- webhacking.kr
- 10809
- 신규 아이디 추천
- JS
- 5585
- 리버싱
- 네트워크
- 프로그래머스
- C언어
- 코딩테스트 연습
- boj
- openCV
- old-1
- 웹케이알
- 소프트맥스 함수
- 게임 프로그래밍
- 퍼셉트론
- 크레인 인형뽑기
- 코드엔진
- Old-14
- 백준
- 웹해킹
- 자바
- 딥러닝
- 계단함수
- 자바스크립트
- Old-17
- Today
- Total
SteffenLee
[C++]STL vector 본문
vector 라이브러리
vector는 타입이 모두 같은 객체의 모음이고, 객체를 담기 때문에 컨테이너(container)이라고 합니다.
배열과 유사한데 다른점이 있다면 메모리가 동적으로 할당된다는 것이다.
나머지 장점이나 단점은 글을 이어나가면서 설명하겠습니다.
vector는 헤더를 <vector>라는 것을 선언해야 사용가능합니다.
Ex)
1 2 3 4 5 6 7 8 | #include<vector> using std::vector;//이건 vector를 std::를 안쓰게 도와준다. int main(){ . . . } | cs |
그리고 vector는 클레스 템플릿입니다.
vector의 정의 및 초기화
정의 형식은 vector<type> 이름;이다.
vector의 정의 예시
1 2 3 4 5 6 7 8 9 | #include<iostream> #include<vector> #include<string> using namespace std;//std라는 이름공간을 사용해줌으로 std::를 할 필요가 없습니다. int main() { vector<int> asdf; vector<char> qwer; vector<string> zxcv;//string헤더의 선언이 필요하다. } | cs |
vector의 정의는 위와 같은 형식으로 이루어진다.
그냥 정의만 하면 기본초기화가 되어 비어있는 vector가 됩니다.
그리고 vector의vector도 가능합니다.
vector<vector<int>> a; 이런 식으로 가능합니다.
C++11이전 문법에서는 vector<vector<int> >이런 식으로 띄어쓰기 한 칸을 넣었어야 했었습니다.
선언과 동시에 초기화도 가능하다.
1 2 3 4 | int maim(){ vector<int> a; vector<int> asdf = (a); } | cs |
위와 같은 형식으로 복사 초기화가 가능합니다. 물론 데이터 타입은 똑같아야됩니다.
vector는 요소를 가지고 있어 목록 초기화가 가능합니다.
ex)
1 2 3 4 | int maim(){ vector<int> a = {1,2,3}; vector<string> b = {"asdf","qwer"}; } | cs |
그리고 주의해야할 점이 있다면 목록 초기화를 할 때에는 소괄호가 아닌 중괄호를 써야합니다.
그렇지 않으면 오류가 납니다.
그리고 개수와 요소의 값을 지정해 초기화도 가능합니다.
1 2 3 4 5 | int main() { vector<int> a(10, 1);//요소는 10개이고 각각 1로 초기화 vector<int> b(10);//요소는 10개 각각 0으로 초기화 vector<int> c{ 10 };//요소는 1개이며 10으로 초기화 되있다. } | cs |
vector 초기화 방법 |
|
vector<type> v1 |
type 객체를 담는 vector, 기본 초기화 되어 비어있음 |
vector<type> v2(v1) |
v2는 v1의 각 요소의 복사본을 담음 |
vector<type> v3(n, val) |
v3은 값이 val인 n개의 요소를 담는다. |
vector<type> v4(n) |
v4는 값 초기화한 객체의 복사본이 n개이다. |
vector<type> v5{a,b,c, ...} |
v5는 요소 수가 초기 값 수와 같으며 각 요소는 해당 초기 값으로 초기화 한다. |
vector<type> v5 = {a, b, c, ...} |
v5와 동일 |
요소 추가
만약 10개의 요소가 각각 다른 vector를 만든다면 목록 초기화를 쓰는 방법이 있습니다.
그런데 요소의 갯수가 20개, 50개 늘어 난다면 어떨까요?
이 vector의 경우는 목록 초기화를 쓰는데 한계가 있을겁니다.
이런 경우에는 vector의 멤버인 push_back을 사용하면 됩니다.
push_back은 마지막 요소 뒤에 새로운 요소를 추가하는 멤버입니다.
ex)
1 2 3 4 5 6 7 8 9 10 | #include<iostream> #include<vector> #include<string> using namespace std; int main() { vector<int> a; int b; while (cin >> b) a.push_back(b); } | cs |
이런식으로 사용이 가능합니다.
vector의 연산
vector의 연산 |
|
v.empty() |
v가 비었으면 true 그렇지 않으면 false |
v.size() |
v의 요소 수 반환 |
v.push_back(t) |
값이 t인 요소를 v 끝에 반환 |
v[n] |
v에서 위치 n에 있는 참조자 반환 |
감사합니다.
부족한 부분이 있다면 지적해주시면 감사하겠습니다.
'Progamming > C,C++' 카테고리의 다른 글
[C언어]자료구조-스택(Stack) (0) | 2018.06.14 |
---|---|
[C/C++]동적할당 연결리스트 (0) | 2018.04.05 |
[C++]decltype 타입 지정자 (0) | 2018.03.11 |
[C언어]게임 만들기 - 숫자야구.ver2(2인용) (1) | 2017.10.11 |
[C언어]게임 만들기 - 행맨[Hang Man](텍스트 기반) (5) | 2017.09.23 |