키베이루's diary

[C++] Vector 본문

알고리즘/기타

[C++] Vector

키베이루 2022. 6. 3. 22:16

 

Vector는 자동으로 메모리가 할당되는 배열로서 데이터의 끝에서 삽입과 삭제가 이루어진다.

배열처럼 연속되는 저장 위치를 사용하므로 데이터의 추가 및 삭제가 간단하게 처리가 된다.

또한 배열과는 다르게 크기는 동적으로 변경이 되므로 메모리의 사용을 줄일 수 있다.

하지만 중간의 데이터를 삭제할 경우 효율적이지 못하므로 삭제가 자주 이루어질경우 리스트를 사용하는 것이 좋다.

 

Vector의 헤더

#include <vector> // 벡터의 헤더파일

 

Vector의 선언

vector <int> v1 // vector <변수이름> 변수명
vector<vector<int>> v1 // 2차원 벡터 생성

 

Vector의 멤버함수

 

1) 접근

v.begin() : 벡터의 첫번째 데이터 위치 반환

v.end() : 벡터의 마지막 데이터 위치 반환

 

v.front() : 벡터의 첫번째 원소 참조

v.back() : 벡터의 마지막 원소 참조

 

v.at(i) : 벡터의 i번째 원소 참조 

 

2) 삽입/삭제

v.push_back(데이터) : 마지막에 데이터 삽입

v.pop_back() : 마지막 원소 제거

 

v.insert(위치, 데이터) : 원하는 위치에 데이터 삽입

v.erase(위치) : 원하는 위치의 데이터 제거

 

3) 크기

v.size() : 벡터의 크기 리턴

v.empty() : 벡터가 비어있으면 true 반환

 

Vector의 여러가지 사용방법

 

v[i] 사용법

vector <int> v;

v.push_back(1);
v.push_back(2);

for(int i=0;i<v.size();i++){
	cout << v[i] << endl;
    }

 

Queue 사용법

vector <int> v;

v.push_back(1);
v.push_back(2);

while(!v.empty){
	cout << v.back << endl;
    v.pop_back();
    }

 

Pair 사용법

vector<pair<첫번째 데이터 타입, 두번째 데이터 타입>> v

vector<pair<int,int>> v;
v.push_back(make_pair(1,2));

 

v[i].first : i번째 원소의 첫번째 인자

v[i].second : i번째 원소의 두번째 인자

vector<pair<int,int>> v;
v.push_back(make_pair(1,2));
for(int i=0;i<v.size();i++){
	cout << v[i].first << v[i].second << endl; // 12
    }

 

정렬

sort(v.begin(), v.end()); // 오름차순
sort(v.begin(), v.end(), less<>()); // 오름차순
sort(v.begin(), v.end(), greater<>()); // 내림차순
sort(v.begin(), v.end(), compare); // compare 함수에 맞춰서 정렬

 

Vector 예제

 

1) 문제설명

백준 Online Judge 1764번 듣보잡

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

2) 코드

#include<iostream>
#include<queue>
#include<deque>
#include<string.h>
#include<math.h>
#include<cmath>
#include<stack>
#include<algorithm>

using namespace std;

int main() {
	int n, m;
	string str;
	cin >> n >> m;
	vector<string> v;
	vector<string> result;
	for (int i = 0; i < n + m; i++) {
		cin >> str;
		v.push_back(str);
	}
	sort(v.begin(), v.end());
	int cnt = 0;
	for (int i = 0; i < n + m; i++) {
		if(i+1<n+m)
			if (v[i] == v[i + 1]) {
				cnt++;
				result.push_back(v[i]);
			}
	}
	cout << cnt << endl;
	sort(result.begin(), result.end(), greater<>());
	while (!result.empty()) {
		cout << result.back() << endl;
		result.pop_back();
	}
	
}

 

 

'알고리즘 > 기타' 카테고리의 다른 글

[C++] 백준 1655번 가운데를 말해요  (0) 2022.06.20
[C++] 백준 11286번 절댓값 힙  (0) 2022.06.09
[C++] 백준 18870번 좌표압축  (0) 2022.05.26
[C++] 백준 10610번 30  (0) 2022.05.26
[C++] 백준 1927번 최소힙  (0) 2022.05.23
Comments