vector에서 반복자(iterator)
#include <vector>
#include <iostream>
std::vector<int> vec = {1, 2, 3, 4, 5};
// 반복자 선언
std::vector<int>::iterator it; // 기본 반복자 선언
it = vec.begin(); // 벡터의 시작을 가리키도록 초기화
C++11부터는 auto를 사용하여 반복자를 간단히 선언
auto it = vec.begin(); // vec의 시작 반복자를 자동으로 선언
std::vector<int> vec = {10, 20, 30, 40, 50};
// 반복자를 사용한 순회
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " "; // 반복자가 가리키는 값 출력
}
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
범위 기반 for문을 사용하면 더 간단하게 순회
for (int value : vec) {
std::cout << value << " ";
}
반복자 유형 설명
iterator | 읽기/쓰기 가능한 기본 반복자. |
const_iterator | 읽기 전용 반복자. 데이터를 수정할 수 없습니다. |
reverse_iterator | 벡터를 역순으로 순회하는 반복자. |
const_reverse_iterator | 읽기 전용 역순 반복자. 데이터를 수정할 수 없습니다. |
읽기 전용 반복자. 요소를 변경하려고 하면 컴파일 에러가 발생
std::vector<int> vec = {1, 2, 3, 4, 5};
// 읽기 전용 반복자
for (std::vector<int>::const_iterator it = vec.cbegin(); it != vec.cend(); ++it) {
std::cout << *it << " "; // 요소를 읽을 수는 있지만 수정은 불가능
}
벡터를 역순으로 순회
std::vector<int> vec = {1, 2, 3, 4, 5};
// 역순 반복자
for (std::vector<int>::reverse_iterator it = vec.rbegin(); it != vec.rend(); ++it) {
std::cout << *it << " ";
}
읽기 전용 역순 반복자
std::vector<int> vec = {1, 2, 3, 4, 5};
// 읽기 전용 역순 반복자
for (std::vector<int>::const_reverse_iterator it = vec.crbegin(); it != vec.crend(); ++it) {
std::cout << *it << " ";
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> a = { 10,20,30,40,50 };
for (vector<int>::iterator it = a.begin(); it != a.end(); ++it)
{
cout << *it << endl;
}
cout << endl;
for (vector<int>::reverse_iterator rev = a.rbegin(); rev != a.rend(); ++rev)
{
cout << *rev << endl;
}
cout << endl;
for (auto it = a.begin(); it != a.end(); ++it)
{
cout << *it << endl;
}
cout << endl;
for (auto it : a)//범위 기반 for 루프
{
cout << it << endl;
}
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm> // std::for_each
#include <iterator> // std::ostream_iterator
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 방법 1: 인덱스를 사용한 순회
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
// 방법 2: Range-based for loop (C++11 이상)
for (int v : vec) {
cout << v << " ";
}
cout << endl;
// 방법 3: 반복자(iterator) 사용
for (auto it = vec.begin(); it != vec.end(); ++it) {
cout << *it << " ";
}
cout << endl;
// 방법 4: std::for_each와 람다 함수 사용
std::for_each(vec.begin(), vec.end(), [](int v) {
cout << v << " ";
});
cout << endl;
// 방법 5: std::copy와 std::ostream_iterator 사용
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(cout, " "));
cout << endl;
return 0;
}
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
반복자를 사용하여 벡터의 요소를 수정
std::vector<int> vec = {1, 2, 3, 4, 5};
// 벡터 요소를 모두 0으로 수정
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
*it = 0; // 반복자가 가리키는 값을 수정
}
// 결과 출력
for (int value : vec) {
std::cout << value << " "; // 출력: 0 0 0 0 0
}
반복자는 std::sort, std::find 등의 STL 알고리즘과 함께 사용
#include <algorithm>
std::vector<int> vec = {3, 1, 4, 1, 5};
// std::sort를 사용하여 정렬
std::sort(vec.begin(), vec.end()); // {1, 1, 3, 4, 5}
// std::find를 사용하여 값 찾기
auto it = std::find(vec.begin(), vec.end(), 3);
if (it != vec.end()) {
std::cout << "Found 3 at index " << it - vec.begin();
}
이진 트리 (Binary Tree) (0) | 2024.12.16 |
---|---|
DFS depth first search & BFS breath first search // Tree트리 01 (1) | 2024.12.16 |
vector 벡터 (0) | 2024.12.14 |
자료구조 별 Big O 시간 복잡도 (1) | 2024.12.13 |
Big O notation (2) | 2024.12.13 |