반복자(iterator)
- 어떤 컨테이너(자료구조)에 접근하든 동일한 방법으로 접근하기 위해서 제공되는 객체
- 원소의 위치를 갖고 있는 포인터와 유사한 형태
vector
- 벡터란? : 배열과 유사, ‘동적 배열구조 클래스’
- 배열은 한번 정해지면 고정, 그러나 vector는 수정 가능(클래스로 구현되어있기 때문)
- 벡터는 필요에 따라서 추가하거나 줄이기 가능
- 벡터 구조
- 장점 :
- 마지막 위치에서 추가/삭제 쉬움
- 구현이 용이(메모리에 순서대로 넣기만 하면 됨)
- 랜덤으로 직접접근 가능
- 단점 :
- 다량의 데이터에서 검색이 느림
- 중간 삽입/삭제가 많은 상황에선 비효율적 (배열과 비슷해서 중간에 삭제하면 하나씩 땡겨주거나 밀어줘야 함)
- 장점 :
- 언제 벡터 사용할까
- 저장하려는 데이터 개수가 가변적일 경우
- 중간 삽입 X 경우
- 저장할 데이터가 적고, 검색이 적을 경우
- 랜덤하데 data 접근 허용가능하게 하고싶을 경우
[기초]
1. 벡터 사용위한 헤더
#include <vector>
2. 생성자를 이용한 디폴트 선언 초기화 :: vector <자료형> [변수 이름] (개수)
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector <char>v1(3); // char arr[3]과 같다
for(char x : v1)
cout<<x<<"8";
return 0;
}
3. 생성자를 이용한 선언 및 초기화 :: vector <자료형> [변수이름] (개수, 값)
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <char>v1(5,'a'); // char arr[3]과 같다
cout << "vector char : ";
for (char x : v1)
cout << x << ",";
cout << endl;
return 0;
}
4. {}를 이용한 선언, 초기화 :: vector <자료형> [변수이름] {....채울 값....}
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <char>v1{'y','e','s'}; // char arr[3]과 같다
cout << "vector char : ";
for (char x : v1)
cout << x << ",";
cout << endl;
return 0;
}
- .push_back() → 함수 뒤 원소 추가
- .pop_back() → 함수 뒤 원소 제거
- vector container(공간)에 접근하기 위해 iterator(반복자) 필요
iterator → pointer와 유사
- begin() : vector 의 첫번째 원소
- end() : vector 마지막 원소의 다음번 원소
Examples
[예시 1]
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> newvec;
newvec.push_back(10);
newvec.push_back(20);
newvec.push_back(30);
newvec.push_back(40);
newvec.push_back(50);
// 벡터 반복자 선언 및 시작점을 가리키도록 함
vector<int>::iterator iter = newvec.begin();
for (iter = newvec.begin(); iter != newvec.end(); ++iter) {
cout << *iter << " ";
}
cout << endl;
}
[예시 2]
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> newvec;
newvec.push_back(10);
newvec.push_back(20);
newvec.push_back(30);
newvec.push_back(40);
newvec.push_back(50);
// 벡터 반복자 선언 및 시작점을 가리키도록 함
vector<int>::iterator iter = newvec.begin();
iter = newvec.begin(); // 다시 iter를 시작점으로 다시 가리킴
//임의 접근
cout << "iter[1] : " << iter[1] << endl;
cout << "iter[3] : " << iter[3] << endl;
}
[예시 4]
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> newvec;
newvec.push_back(10);
newvec.push_back(20);
newvec.push_back(30);
newvec.push_back(40);
newvec.push_back(50);
// 벡터 반복자 선언 및 시작점을 가리키도록 함
vector<int>::iterator iter = newvec.begin();
// 예시 4
// 반복자를 통한 원소 값 변경
* iter = 10; // newvec.begin(), 시작 위치
*(iter + 1) = 700;
iter[2] = 500;
for (iter = newvec.begin(); iter != newvec.end(); ++iter) {
cout << *iter << " ";
}
cout << endl;
return 0;
}
'코딩 > C++' 카테고리의 다른 글
[C++] :: String - c++의 문자열 라이브러리 (0) | 2022.01.13 |
---|---|
백준 문제풀이 C++ [220112] - 함수, 문자열 (0) | 2022.01.13 |
백준 문제풀이 C++ 배열 [220111] - 1차원 배열 (0) | 2022.01.12 |
백준 문제풀이 C++ 배열 [211221] - Taffy (0) | 2021.12.21 |
백준 문제풀이 C++ [211221] - Taffy (0) | 2021.12.21 |