#include <iostream> // 표준 입출력 라이브러리 포함
#include <vector> // 벡터 라이브러리 포함
using namespace std;
int main() {
vector<int> g1; // 정수형 벡터 g1을 선언 (현재 비어 있음)
for (int i = 0; i < 5; i++) // 0부터 4까지 벡터에 값을 추가
g1.push_back(i); // g1 벡터에 i 값을 추가 (g1 = {0, 1, 2, 3, 4})
cout << "Size : " << g1.size() << endl; // 현재 벡터의 크기(요소 개수) 출력
cout << "Capacity : " << g1.capacity() << endl; // 벡터의 용량(메모리 할당 크기) 출력
g1.resize(10); // 벡터의 크기를 10으로 변경 (빈 요소는 기본값 0으로 채워짐)
cout << "Size : " << g1.size() << endl; // 변경된 벡터의 크기 출력
// 벡터의 모든 요소를 출력
for (auto it = g1.begin(); it != g1.end(); it++)
cout << *it << " "; // 현재 요소 값 출력
return 0; // 프로그램 정상 종료
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<int> g1;
for (int i = 1; i <= 10; i++)
g1.push_back(i * 10);
cout << "g1[2] = " << g1[2] << endl;
cout << "g1.at(4) = " << g1.at(4) << endl;
cout << "g1.front() = " << g1.front() << endl;
cout << "g1.back() = " << g1.back() << endl;
return 0;
}
- vector<int> g1;:
- 정수형 벡터 **g1**을 선언합니다. 초기에는 아무 값도 들어 있지 않으므로 빈 벡터입니다.
- for (int i = 0; i < 5; i++) g1.push_back(i);:
- 반복문을 사용하여 0부터 4까지의 값을 벡터에 추가합니다.
- push_back() 함수는 벡터의 끝에 새로운 요소를 추가하는 함수입니다.
- 이 과정을 통해 g1 벡터는 **{0, 1, 2, 3, 4}**가 됩니다.
- cout << "Size : " << g1.size() << endl;:
- size() 함수는 벡터에 들어 있는 현재 요소의 개수를 반환합니다.
- 이 시점에서 **g1**에는 5개의 요소(0, 1, 2, 3, 4)가 있으므로, **Size : 5**가 출력됩니다.
- cout << "Capacity : " << g1.capacity() << endl;:
- capacity() 함수는 벡터가 현재 메모리에 할당된 용량을 반환합니다.
- 벡터는 요소가 추가될 때 **용량(capacity)**을 미리 할당하여, 필요할 때 자동으로 확장합니다. **capacity()**는 그 크기를 반환하며, 이는 벡터의 실제 크기와 다를 수 있습니다.
- 용량 값은 벡터의 구현 방식과 시스템에 따라 달라질 수 있습니다.
- g1.resize(10);:
- resize() 함수는 벡터의 크기를 조절합니다.
- 여기서 크기를 10으로 변경하며, 벡터가 커진 만큼 추가된 요소는 **기본값(정수형인 경우 0)**으로 채워집니다.
- 벡터의 새로운 상태는 **{0, 1, 2, 3, 4, 0, 0, 0, 0, 0}**가 됩니다.
- cout << "Size : " << g1.size() << endl;:
- 벡터의 크기가 10으로 변경되었으므로 **Size : 10**이 출력됩니다.
- for (auto it = g1.begin(); it != g1.end(); it++):
- 벡터의 모든 요소를 출력하는 반복문입니다.
- **begin()**은 벡터의 첫 번째 요소를 가리키는 **반복자(iterator)**를 반환하고, **end()**는 벡터의 마지막 요소 다음을 가리킵니다.
- ***it**는 반복자가 가리키는 현재 요소를 참조하며, 각 요소를 차례로 출력합니다.
- cout << *it << " ";:
- 벡터의 각 요소를 출력하며, 각 요소 뒤에 공백을 추가합니다.
- 최종 출력은 **0 1 2 3 4 0 0 0 0 0**가 됩니다.
#include <iostream> // 표준 입출력 라이브러리 포함
#include <vector> // 벡터 라이브러리 포함
using namespace std;
int main() {
vector<int> v(5); // 크기가 5인 정수형 벡터 v 생성, 초기값은 모두 0
int i = 0; // 변수 i를 0으로 초기화
vector<int>::reverse_iterator rit = v.rbegin();
// 벡터 v의 역방향 반복자 rit를 선언하고 rbegin()으로 초기화 (벡터의 마지막 요소를 가리킴)
// 역방향으로 벡터의 요소를 채우는 반복문
for (; rit != v.rend(); ++rit) {
*rit = ++i; // 각 요소에 i의 증가된 값을 할당 (1, 2, 3, 4, 5)
}
// 순방향으로 벡터의 요소를 출력하는 반복문
for (auto it = v.begin(); it != v.end(); ++it) {
cout << ' ' << *it; // 각 요소를 출력 (공백으로 구분)
}
cout << '\n'; // 출력 후 줄바꿈
return 0; // 프로그램 정상 종료
}
상세 설명
- vector<int> v(5);:
- 크기가 5인 정수형 벡터 v를 선언합니다. 벡터는 기본적으로 0으로 초기화됩니다.
- 즉, v = {0, 0, 0, 0, 0} 상태가 됩니다.
- int i = 0;:
- 변수 **i**를 0으로 초기화합니다. 이 변수는 반복문에서 값을 증가시키면서 벡터의 요소를 채우는 데 사용됩니다.
- vector<int>::reverse_iterator rit = v.rbegin();:
- 벡터의 **역방향 반복자(reverse iterator)**인 **rit**를 선언하고, **rbegin()**으로 초기화합니다.
- **rbegin()**은 벡터의 마지막 요소를 가리키는 반복자를 반환합니다. 이를 통해 벡터의 마지막 요소부터 처음 요소까지 역방향으로 순회할 수 있습니다.
- 역방향으로 벡터의 요소를 채우는 반복문:
- rit != v.rend(): 벡터의 끝(처음 요소의 앞)을 가리키는 **rend()**에 도달할 때까지 반복합니다.
- *rit = ++i: 역방향으로 순회하면서 각 요소에 **i**의 값을 1씩 증가시켜 할당합니다.
- 처음에는 i = 1, 그다음 i = 2, ..., i = 5까지 할당됩니다.
- 이 과정을 통해 **벡터는 {5, 4, 3, 2, 1}**로 변경됩니다.
-
cpp코드 복사for (; rit != v.rend(); ++rit) { *rit = ++i; }
- 순방향으로 벡터의 요소를 출력하는 반복문:
- **순방향 반복자(it)**를 사용하여 벡터의 첫 번째 요소부터 마지막 요소까지 순회합니다.
- 각 요소를 공백과 함께 출력합니다.
- 출력 결과는 **5 4 3 2 1**가 됩니다.
-
cpp코드 복사for (auto it = v.begin(); it != v.end(); ++it) { cout << ' ' << *it; }
- cout << '\n';:
- 마지막 출력 후 줄바꿈을 삽입합니다.
#include <iostream> // 표준 입출력 라이브러리 포함
#include <vector> // 벡터 라이브러리 포함
using namespace std;
int main() {
vector<int> v; // 정수형 벡터 v 선언
// 벡터에 5개의 값 10을 할당
v.assign(5, 10);
// v = {10, 10, 10, 10, 10}
// 벡터의 모든 요소를 출력
for (int i = 0; i < v.size(); i++)
cout << v[i] << " "; // 출력: "10 10 10 10 10 "
cout << endl;
// 벡터의 끝에 15 추가
v.push_back(15);
// v = {10, 10, 10, 10, 10, 15}
// 마지막 요소 출력
int n = v.size(); // n은 벡터의 크기
cout << "The last element is: " << v[n - 1] << endl; // 출력: "The last element is: 15"
// 마지막 요소 제거
v.pop_back();
// v = {10, 10, 10, 10, 10}
// 현재 벡터의 모든 요소 출력
cout << "The vector elements are: ";
for (int i = 0; i < v.size(); i++)
cout << v[i] << " "; // 출력: "10 10 10 10 10 "
cout << endl;
// 벡터의 맨 앞에 5 삽입
v.insert(v.begin(), 5);
// v = {5, 10, 10, 10, 10, 10}
// 첫 번째 요소 출력
cout << "The first element is: " << v[0] << endl; // 출력: "The first element is: 5"
// 첫 번째 요소 제거
v.erase(v.begin());
// v = {10, 10, 10, 10, 10}
// 첫 번째 요소 출력
cout << "The first element is: " << v[0] << endl; // 출력: "The first element is: 10"
// 벡터를 모두 지움
v.clear();
// v = {}
// 벡터의 크기 출력
cout << "Vector size: " << v.size() << endl; // 출력: "Vector size: 0"
return 0;
}
상세 설명
- v.assign(5, 10);:
- assign 함수는 벡터에 5개의 요소를 할당하며, 각 요소는 10으로 채워집니다.
- 벡터 **v**는 **{10, 10, 10, 10, 10}**가 됩니다.
- for (int i = 0; i < v.size(); i++) cout << v[i] << " ";:
- 벡터 **v**의 모든 요소를 순차적으로 출력합니다.
- 출력 결과는 **"10 10 10 10 10 "**입니다.
- v.push_back(15);:
- push_back 함수는 벡터의 끝에 15를 추가합니다.
- 벡터는 **{10, 10, 10, 10, 10, 15}**로 변합니다.
- int n = v.size(); cout << "The last element is: " << v[n - 1];:
- **v.size()**는 벡터의 크기를 반환하고, **v[n - 1]**은 마지막 요소를 의미합니다.
- 출력 결과는 **"The last element is: 15"**입니다.
- v.pop_back();:
- pop_back 함수는 벡터의 마지막 요소(15)를 제거합니다.
- 벡터는 다시 **{10, 10, 10, 10, 10}**로 변합니다.
- 벡터 요소 출력:
- 다시 벡터의 모든 요소를 출력하면 **"The vector elements are: 10 10 10 10 10 "**가 출력됩니다.
- v.insert(v.begin(), 5);:
- insert 함수는 벡터의 맨 앞에 5를 삽입합니다.
- 벡터는 **{5, 10, 10, 10, 10, 10}**이 됩니다.
- 첫 번째 요소 출력:
- 벡터의 첫 번째 요소인 **5**를 출력합니다. 결과는 **"The first element is: 5"**입니다.
- v.erase(v.begin());:
- erase 함수는 벡터의 첫 번째 요소(5)를 제거합니다.
- 벡터는 다시 **{10, 10, 10, 10, 10}**로 변합니다.
- 다시 첫 번째 요소 출력:
- 이제 첫 번째 요소는 **10**이므로, 결과는 **"The first element is: 10"**입니다.
- v.clear();:
- clear 함수는 벡터의 모든 요소를 제거하여 벡터를 비웁니다.
- 벡터는 빈 상태가 됩니다.
- 벡터의 크기 출력:
- **v.size()**는 0을 반환합니다. 결과는 **"Vector size: 0"**입니다.
#include <iostream>
#include <vector> // 벡터 라이브러리 포함
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3, 4, 5, 6}; // v1 벡터 초기화 (6개의 정수)
vector<int> v2 = {7, 8, 9}; // v2 벡터 초기화 (3개의 정수)
// v1에서 인접한 요소들끼리 교환
for (int i = 0; i <= 4; i += 2)
swap(v1[i], v1[i + 1]);
// v1 벡터 출력
cout << "Vector v1 = ";
for (int i = 0; i < 6; i++)
cout << v1[i] << " ";
cout << endl;
// v1과 v2의 첫 번째, 두 번째, 세 번째 요소를 서로 교환
for (int i = 0; i < 3; i++)
swap(v1[i], v2[i]);
// v1 벡터 출력
cout << "Vector v1 = ";
for (int i = 0; i < 6; i++)
cout << v1[i] << " ";
cout << endl;
// v2 벡터 출력
cout << "Vector v2 = ";
for (int i = 0; i < 3; i++)
cout << v2[i] << " ";
cout << endl;
return 0;
}
상세 설명
- vector<int> v1 = {1, 2, 3, 4, 5, 6};:
- 크기가 6인 벡터 **v1**을 선언하고 **{1, 2, 3, 4, 5, 6}**으로 초기화합니다.
- vector<int> v2 = {7, 8, 9};:
- 크기가 3인 벡터 **v2**를 선언하고 **{7, 8, 9}**로 초기화합니다.
- for (int i = 0; i <= 4; i += 2) swap(v1[i], v1[i + 1]);:
- 이 반복문은 벡터 **v1**의 인접한 요소들을 서로 교환합니다.
- **i += 2**로 짝수 인덱스의 요소와 그 다음 인접한 요소를 교환합니다.
- 교환되는 요소들:
- **v1[0]**과 v1[1]: 1과 2를 교환 → 결과: {2, 1, 3, 4, 5, 6}
- **v1[2]**과 v1[3]: 3과 4를 교환 → 결과: {2, 1, 4, 3, 5, 6}
- **v1[4]**과 v1[5]: 5와 6을 교환 → 결과: {2, 1, 4, 3, 6, 5}
- 첫 번째 출력: v1:
- 첫 번째 v1 벡터는 교환된 후 **{2, 1, 4, 3, 6, 5}**로 변합니다.
- 출력 결과: Vector v1 = 2 1 4 3 6 5
- for (int i = 0; i < 3; i++) swap(v1[i], v2[i]);:
- 이 반복문은 **v1**과 **v2**의 첫 번째, 두 번째, 세 번째 요소들을 서로 교환합니다.
- 교환되는 요소들:
- **v1[0]**과 v2[0]: 2와 7을 교환 → v1 = {7, 1, 4, 3, 6, 5}, v2 = {2, 8, 9}
- **v1[1]**과 v2[1]: 1과 8을 교환 → v1 = {7, 8, 4, 3, 6, 5}, v2 = {2, 1, 9}
- **v1[2]**과 v2[2]: 4와 9를 교환 → v1 = {7, 8, 9, 3, 6, 5}, v2 = {2, 1, 4}
- 두 번째 출력: v1:
- 두 번째 v1 벡터는 교환된 후 **{7, 8, 9, 3, 6, 5}**로 변합니다.
- 출력 결과: Vector v1 = 7 8 9 3 6 5
- 세 번째 출력: v2:
- v2 벡터는 **{2, 1, 4}**로 변합니다.
- 출력 결과: Vector v2 = 2 1 4
#include <algorithm> // sort(), unique() 함수 포함
#include <iostream> // 표준 입출력 라이브러리 포함
#include <vector> // 벡터 라이브러리 포함
using namespace std;
int main() {
// 벡터 초기화
vector<int> my_vec = {1, 3, 1, 4, 4, 6, 5, 6, 6};
// 벡터 정렬
sort(my_vec.begin(), my_vec.end());
// 정렬된 벡터 출력
for (int item : my_vec)
cout << item << " ";
cout << endl;
// 중복을 제거하고 고유 요소로 구성된 범위를 반환 (하지만 크기는 그대로)
auto it = unique(my_vec.begin(), my_vec.end());
// 중복 제거 후의 벡터 출력 (아직 실제로 삭제되지 않았고, 중복된 값들이 뒤에 남아 있음)
for (int item : my_vec)
cout << item << " ";
cout << endl;
// 실제로 중복된 요소들을 벡터에서 삭제
my_vec.erase(it, my_vec.end());
// 중복 제거 후 최종 벡터 출력
for (int item : my_vec)
cout << item << " ";
cout << endl;
return 0;
}
상세 설명
- vector<int> my_vec = {1, 3, 1, 4, 4, 6, 5, 6, 6};:
- 정수형 벡터 **my_vec**을 **{1, 3, 1, 4, 4, 6, 5, 6, 6}**으로 초기화합니다.
- sort(my_vec.begin(), my_vec.end());:
- sort() 함수는 벡터의 요소를 오름차순으로 정렬합니다.
- 정렬 후 **my_vec**은 **{1, 1, 3, 4, 4, 5, 6, 6, 6}**로 변합니다.
- 정렬된 벡터 출력:
- 벡터의 모든 요소를 출력합니다. 출력 결과는:
코드 복사1 1 3 4 4 5 6 6 6 -
cpp코드 복사for (int item : my_vec) cout << item << " ";
- auto it = unique(my_vec.begin(), my_vec.end());:
- unique() 함수는 인접한 중복된 요소를 제거하고, 고유한 값으로 구성된 새로운 범위를 반환합니다. 하지만 실제로 중복된 요소가 삭제되는 것은 아닙니다.
- **unique()**는 중복을 제거한 후 중복된 요소들이 있는 위치의 반복자를 반환합니다.
- 이 단계에서는 **my_vec**이 **{1, 3, 4, 5, 6, ?, ?, ?, ?}**로 변형됩니다. 중복된 값들이 앞쪽으로 모이지만, 뒤쪽에 여전히 중복된 값들이 남아 있습니다.
- 중복 제거 후의 벡터 출력:
- 중복을 제거한 후의 벡터를 출력하면 여전히 중복된 요소가 포함된 상태입니다.
- 출력 결과는:
코드 복사1 3 4 5 6 6 6 6 6- 여기서 보듯이, 중복된 요소들이 뒤쪽에 남아 있지만 앞쪽에는 고유한 값들만 위치합니다.
-
cpp코드 복사for (int item : my_vec) cout << item << " ";
- my_vec.erase(it, my_vec.end());:
- erase() 함수는 벡터에서 지정된 범위의 요소를 실제로 삭제합니다.
- **it**는 **unique()**가 반환한 반복자이며, 이 위치부터 벡터의 끝까지의 요소가 삭제됩니다.
- 이 작업 후 **my_vec**은 **{1, 3, 4, 5, 6}**로 변합니다.
- 중복 제거 후 최종 벡터 출력:
- 최종적으로 중복이 제거된 벡터를 출력합니다.
- 출력 결과는:
코드 복사1 3 4 5 6 -
cpp코드 복사for (int item : my_vec) cout << item << " ";
최종 출력 결과
이 프로그램을 실행하면 다음과 같은 결과가 출력됩니다:
코드 복사
1 1 3 4 4 5 6 6 6 1 3 4 5 6 6 6 6 6 1 3 4 5 6
요약
- 이 프로그램은 벡터의 요소를 정렬하고, 중복된 요소를 제거하는 과정입니다.
- **sort()**는 벡터를 오름차순으로 정렬하고, **unique()**는 중복된 값을 제거한 뒤의 범위를 반환하지만, 실제로 중복된 값들은 그대로 남아 있습니다.
- **erase()**를 통해 중복된 요소들을 벡터에서 실제로 삭제하여 최종적으로 중복 없는 벡터가 됩니다.
'IT 프로그래밍 > 자료구조' 카테고리의 다른 글
[자료구조] 그룹 액티비티 3 (0) | 2024.10.22 |
---|---|
[자료구조] 프로그래밍 과제1 (0) | 2024.10.20 |
[자료구조] 프로그래밍과제1 그룹액티비티 (0) | 2024.10.20 |
스택과 C++ STL 컨테이너 (0) | 2024.10.15 |
[자료구조] Generic 프로그래밍과 C++ Template (0) | 2024.10.15 |