코딩테스트/C++ 문법 정리

C++ Vector에 대해 알아보자

SK_MOUSE 2020. 8. 10. 17:48
반응형

https://ko.wikipedia.org/wiki/C%2B%2B#/media/%ED%8C%8C%EC%9D%BC:ISO_C++_Logo.svg

먼저 https://codeup.kr/problem.php?id=1098의 문제에서 2차원 배열을 변수값을 이용해서 할당하기 위한 방법을 찾다가, Vector를 처음 사용하게 되었다.

 

[기초-2차원배열] 설탕과자 뽑기

C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요.  - 모든 내용 ��

codeup.kr

 

#include <iostream>
#include <vector>
using namespace std;

int main() {

	int w, h;
	int n;
	int l, d, x, y;

	cin >> w >> h;//바둑판입력 w * h

	vector<vector<int>> vector2D(w, vector<int>(h, 0));

	cin >> n;//놓을 막대의 개수 입력


	for (int i = 1; i <= n; i++) {//막대들 입력 길이(l),방향(d)(0가로1세로),좌표(x,y)
		cin >> l >> d >> x >> y; 

		x = x-1, y = y-1;
		//cout << x << y << endl;
		if (d == 0) {//가로 방향 막대
			for (int i = 1; i <= l; i++) {
				vector2D[x][y] = 1;
				y++;
			}
		}
		else {
			for (int i = 1; i <= l; i++) {
				vector2D[x][y] = 1;
				x++;
			}
		}
		//출력
		/*for (int i = 0; i < vector2D.size(); i++) {
			for (int j = 0; j < vector2D[i].size(); j++) {
				cout << vector2D[i][j];
			}
			cout << "\n";
		}*/
	}
	//cout << "vector2D size : " << vector2D.size() << endl;
	//cout << "vector2D size : " << vector2D[0].size() << endl;

	for (int i = 0; i < vector2D.size(); i++) {
		for (int j = 0; j < vector2D[i].size(); j++) {
			cout << vector2D[i][j] << " ";
		}
		cout << "\n";
	}
	
	

}

 

 

위에서 확인해야 할 사항은 두가지이다.

1. 벡터를 사용하기 위해서 #include <vector> 라이브러리를 import했다.

2. 벡터를 사용하기 위한 기본 식은 아래와같다.

 

vector<자료형> 벡터이름(생성개수, 생성한벡터의 초기값); 

 

 

벡터는 자동으로 메모리를 할당해주고 알아서 긑에 들어가주고 삭제해주는...배열기반의 구조체이다.

 

  • vector<int> v;

  • vector<int> v(5); //벡터 5개 원소생성

  • vector<int> v(5,2); //벡터 5개원소를 2로채움

  • vector<int> v2(v1); //v2에 v1을 복사

 

다음으로 vector의 멤버 함수에 대해 알아보겠다.

  • v.assign(5,2); //2의 값으로 5개의 원소할당

  • v.at(idx); //idx번째 원소를 참조합니다. v[idx]보다 느리지만 범위점검함.

  • v[idx]; //배열처럼 접근 가능. 범위점검x

  • v.front(); //첫번째 원소 참조

  • v.back(); //마지막 원소 참조

  • v.clear(); // 모든 원소 제거, but 메모리는 남아있음.  size만 줄고 capacity는 그대로 남아있는다.

  • v.push_back(6); //마지막 원소 뒤에 원소 6을 삽입한다.

  • v.pop_back(); //마지막 원소 제거.

  • v.begin(); //첫번째 원소 가리킴(iterator와 함께 사용)

  • v.end(); //마지막의 "다음"을 가리킨다(iterator와 함께 사용)

  • v.rbegin(); //reverse begin을 가리킨다(거꾸로해서 첫번째 원소 가리킨다)

  • v.rend(); //reverse end을 가리킨다

  • v.reverse(n); //n개의 원소를 저장할 위치를 예약한다.

  • v.resize(n); //크기를 n으로 변경한다. 더 커졌을경우 default값인 0으로 초기화.

  • r.resize(n, 3); //크기를 n으로 변경. 더 커졌을경우 인자의 값을 3으로 초기화.

  • v.size(); //원소의 개수 리턴

  • v.capacity(); //할당된 공간 크기 리턴. capacity는 2배씩 커진다. 2->4->8->16->....

  • v2.swap(v1); //v1과 v2의 원소와 capacity를 바꾼다.

  • v.insert(2,3,4); //2번째 위치에 3개의 4를 삽입.

  • v.insert(2,3); //2번쨰 위치에 3의 값을 삽입.

  • v.erase(iter); //iter가 가리키는 원소를 제거.

  • v.empty() //벡터가 비어있으면 true, 아니면 false.

반응형